Java IO流分类:
按照输入输出分为:输入流,输出流,输入输出流的概念是相对的,相当于安在文件上的管道,新new出的InputStream对象是指磁盘文件等,每当程序要进行读操作时指的是从文件中读数据,对于文件来说是输出数据,但对于程序是读取/输入数据,应使用输入流,反之进行写操作时使用输出流。
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连分为:节点流, 处理流
节点流可以直接new出来,而处理流相当于套在节点流管道上的一层管道,必须在节点流的基础上创建
如节点流 FileInputStream in = new FileInputStream("C:/java/a.txt");
而处理流如
InputStream in = new InputStream("C:/java/a.txt");
BufferedInputStream bin = new BufferedInputStream(in);
这样的形式带节点流对象参数或父类参数构造,直接BufferedInputStream bin = new BufferedInputStream("C:/java/a.txt");安在文件上是不行的
节点流分为字节流,字符流,字节流指每次读入写出一个字节一个字节的处理(1 Byte), 能处理所有类型数据,(图片,Long,Float等),字符流一个字符一个字符的处理(2 Byte),只能处理字符型数据
父 类 InputStream OutputStream(字节流) Reader Writer (字符流) 全是抽象类
常用的节点流 :
对文件进行处理 FileInputStream FileOutputStream (字节流) FileReader FileWriter (字符流)
对程序数组进行处理 ByteArrayInputStream ByteArrayOutputStream (字节流) CharArrayReader CharArrayWriter (字符流)
对字符串进行处理 (已废弃的StringBufferInputStream StringBufferInputStream字节流) StringReader StringWriter (字符流)
对管道进行处理 PipedInputStream PipedOutputStream (字节流) PipedReader PipedWriter (字符流)
常用的处理流:
1.缓冲流:BUfferedInputSream BufferedOutputStream BufferedReader BufferedWriter
此类对像含mark()方法,类似标签
IO的缓冲区的存在就是为了提高效率,把要操作的数据放进缓冲区,然后一次性把缓冲区的内容写到目的地,而不是写一次就往目的地写一次.在这里要注意的是当我们关闭了缓冲区对象实际也关闭了与缓冲区关联的流对象.
2.转换流: InputstreamReader OutputStreamWriter
将字节流转换成字符流,是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。
3.数据流: DataInputStream DataOutputStream DataReader DataWriter
提供了可存取Java基本数据类型的方法
4.Print流:(输出流)PrintWriter PrintStream
提供了重载的print方法,能直接向管道中写数据,不会抛异常,有自动flush()功能
5.Object流 ObjectInputStream ObjectOutputStream
直接将Object转换成字节流读入写出,称为对象的序列化,必须实现Serializable接口
transient关键字: 修饰成员变量,不写入该成员变量