Java的I/O总结

时间:2023-03-08 17:18:40

概念:Java语言中数据流是接收和发送数据的管道。流是一位单项的。

流的分类:

按照字节字符:InputStream和OutputStream是字节输入输出流的抽象父类。Reader和Writer是字符输入和输出流的抽象父类。

按照是直接否从特定的地方(如磁盘,内存、设备)相连分为节点流和处理流

  节点流:可以从一个或者向一个特定的地方(节点)读写数据;

  处理流:对一个已经存在的流的连接和封装,通过封装的流的功能调用实现数据读写。处理流的构造总要带上其他流的对象作为参数。一个流的对象经过其他流的多次包装,称为流的链接。

1、InputStream

有三个方法访问其数据:

(1)int read(): 返回一个int值,它是从流中读取的一个字节,如果遇到文件结束返回-1.

(2)int read(byte []):将数据读到字节数组中,并返回读到的字节数。

(3)int read(byte [], int offest, int length):将数据读到字节数组中,并返回读到的字节数。offest为数组的偏移量。

其它常用的方法:close() available() skip() reset()

Java的I/O总结

2、OutputStream

与InputStream相应的方法:write(int) write(byte[]) write(byte[],int,int)

flash():有时输入流在积累了若干次之后才真正的进行写操作,flash可强制进行写操作。

Java的I/O总结

3、Reader

读取方法:
(1)int read(): 返回一个int值,它是从流中读取的一个字符,如果遇到文件结束返回-1.

(2)int read(char []):将数据读到字符数组中,并返回读到的字符数。

(3)int read(byte [], int offest, int length):将数据读到字符组中,并返回读到的字符数。offest为数组的偏移量。

Java的I/O总结

4、Writer

write(char) write(char[]) write(char[],int,int),write(String,Stirng),write(Stirng,int,int),close(),flash()

Java的I/O总结

对象的串行化(序列化)

1、实现接口java.io.Serializable。该接口没有任何方法,只作为一个标记,用来声明实现这个接口的类是可序列化的。

2、当一个对象被串行化,只有对象的数据被串行化,方法和构造函数不属于串行化流。如果一个数据变量是一个对象的引用,那么呢这个对象的数据成员也会被串行化。

节点流

System.in/.out/.err 的返回值是PrintStream对象

ByteArrayInputStream 流的关闭无效(关闭后仍可使用,在内存中,可自动释放)

ByteArrayOutputStream 关闭流无效;可使用 toByteArray() 和 toString() 获取数据。

方法:writeTo(OutputStream out) 将此 byte 数组输出流的全部内容写入到指定的输出流参数中。

FileInputStream 文件输入流

FileOutputStream 文件输出流

处理流

1、缓冲流,增强功能;BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter

2、转换流,处理乱码 {

编码:字符----编码字符集--->>二进制

解码:二进制----解码字符集--->>字符

乱码原因:

(1)、编码与解码的字符集不同

(2)、字节数组长度不够

转换流:字节转换为字符

输出流 outputStreamWriter 编码

输入流 inputStreamReader 解码

3、数据输入及输出流

DataInputStream、DataOutputStream

1、读取顺序及类型与写入顺序及数据类型必须一致。

writeBytes(str);  字符串对象的第一种写法

writeChars(str);  字符串对象的第2种写法

writeUTF(sj11);  字符串对象的第3种写法,此方法用的较多

4、对象

反序列化 输入流 ObjectIntputStream  方法:readObject()

序列化  输出流 ObjectOutputStream  方法:writeObject()

注意:

1、先序列化后反序列化;反序列化顺序必须与序列化一致

2、不是所有的对象都可以序列化,transient dataType

5、打印流PrintStream

System.in/out/err 返回值为该类型

调试应用:可将控制台输出保存在文件中