Java中的I/O输入和输出
1
、流:代表任何有能力产出数据和数据源对象,或者有能力接收数据的数据端对象(流概念屏蔽了I/O设备中处理数据的底层细节);
2、Java类库中的I/O类分为3大类:
(
1)InputStream/Reader:输入基类
(2)OutputStream/Writer:输出基类
(3)RandomAccessFile:随机文件读取写入类
3、两组基类的区别:
(1)InputStream/OutputStream:用于
面对字节byte的I/O流读写
;
(2)Reader/Writer:用于
面对字符和兼容Unicode的I/O流读写
;
4、可以使用相应的
adpater(适配器)将面对字节流包装为面对字符流,如:
InputStreamReader可以将InputStream装换为Reader
InputStreamReader in = new InputStream(new InputStream(......));
5、尽可能使用Reader和Writer,一旦无法成功编译,再使用面对字节流InputStream/OutputStream;
除非有些类库只支持面向字节流,如java.util.zip;
6、一般很少使用单一的类来创建流对象,而是通过叠合对个对象来提供所期望的功能(装饰器模式);
7、3大流基类的read、write的区别
18.2 InputStream和OutputStream
1、InputStream/OutputStream可接受的数据源:
①字节数组;
②String对象;(OutputStream不是能是String,可以使用字节数组自己创建)
③文件;
④管道,(一端输入,一端输出);
⑤一个由其他种类的流组成的序列,以便将其收集合并在一个流内;
⑥其他数据源,如Internet连接等;
※每一种数据源都有相应的InputStream/OutputStream子类,此外
FilterInputStream/FilterOutputStream为修饰器类提供基类;
2、基本包含类
(1)基本类
(2)修饰器类
3、基本内含方法:
Reader和Writer
1、适配器类
2、基本内含方法
RandomAccessFile
1、RandomAccessFile适用于由大小已知的记录组成的文件,可以使用seek等方法,
对文件实现随机位置读取和写入;
2、
只有RandomAccessFile支持搜寻方法,并且只适用于文件,mark,reset等方法,(BufferedInputStream也有这些方法,但是效果不是很理想);
3、RandomAccessFile不是InputStrem和OutputStream继承结构的一部分,除了实现DataInput和DataOutput接口外,和两个结构没有任何联系;
4、在JDK 1.4中,RadnomAccessFile的大多数功能(不是全部)由nio存储映射文件所取代;
nio储存映射文件链接
:
3-T5.Java.nio储存映射文件
5、RandomAccessFile的一些主要方法:
※①RandomAccessFile 的writeType方法是一种覆盖式的写入,即写入的内容将完全覆盖原来偏移量处的相应字节位的内容;
②length返回的长度是以字节byte为单位的;
③seek的偏移是以字节数byte为单位的,一般格式为seek(number * byteMetric)
④各种基本数据类的偏移量
writeBoolean————1byte;
writeByte
————
1byte;
writeShort
————
2byte;
writeInt
————
4byte;
wirteLong
————
8byte;
writeFloat
———— 4
byte;
writeDouble
————
8byte;
writeChar
————
2byte;