-----------------------------------------------------------------android培训、java培训、期待与您交流! ---------------------------------------------------------------
IO其他流
打印流:该流提供了打印方法,可以将各种数据类型原样打印。
字节打印流
PrintStream :该流可以直接操作Flie
构造函数可以接收的参数类型:
1. File对象
2. 字符串路径
3. 字节输出流。OutputStream
PrintWriter :
构造函数可以接收的参数类型:
1. File对象
2. 字符串路径
3. 字节输出流。OutputStream
4. 字符输出流。Writer
PrintWriter(OutputStream out, boolean autoFlush)
当为true时,则 println、printf 或 format 方法将刷新输出缓冲区
序列流
SequenceInputStream
可以合并多个流
两个构造函数:
SequenceInputStream(Enumeration<? extends InputStream> e)
SequenceInputStream(InputStream s1, InputStream s2)
需要传入Enumeration类
在集合Vector中的elements()方法会返回一个Enumeration对象
操作对象流
ObjectInputStream
ObjectOutputStream
被操作的对象需要实现Serializable(标记接口)
标记接口就是没有方法的接口
static静态数据可以不序列化
transient 修饰非静态数据可以不序列化
管道流(结合线程使用)
PipedInputStream
PipedOutputStream
输入输出可以直接进行连接,通过结合线程使用
不建议对这两个对象使用单线程,因为这样容易可能死锁线程
连接两个管道有两种方法:
第一种方法通过构造函数
PipedInputStream(PipedOutputStream src)
PipedOutputStream(PipedInputStream snk)
第二种方法通过connect方法连接
RandomAccessFile(只能操作文件)
该类不算是IO体系中的子类,直接继承自Object,但是他是IO包中的成员,其具备读写功能,内部封装了一个数组,通过指针对数组元素进行操作。
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针
该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
通过skipBytes(intx),seek(int x)来达到随机访问
通过构造函数可以看出,该类只能操作文件,且需要制定模式mode
mode模式:
以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。 | |
"rw" | 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。 |
"rws" | 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。 |
"rwd" | 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备 |
seek(int x) 调整对象指针
skipBytes(int x) 指针不能往回走访问
且该对象的构造函数所操作的文件不存在,会自动创建,如果存在,则不会覆盖。
如果模式为r,不会创建文件,所读文件不存在时会报异常
如果模式为rw,操作文件不存在时,会自动创建,如果存在则不覆盖该文件
操作基本数据类型流
DataInputStream
DataOutputStream
除了基本读写基本数据类型的方法外还有特殊的方法
writeUTF()---用该方法写入的数据只能使用特定的readUTF()方法读取
操作字节数组
ByteArrayInputStream :在构造时,需要接收数据源,且该源是一个字节数组
ByteArrayOutputStream :在构造时,不用定义数据目的,缓冲区会随着数据自动增长
因为没有调用底层所以不需要关闭流,且不会产生任何IOException
特有方法:
writeTo() :将缓冲的数据,一次写入到其他流中---该方法需要处理异常
操作字符数组
CharArrayInputStream
CharArrayOutputStream
操作字符串数组
StringReader(已过时)
StringWriter
原理同ByteArrayInputStream和ByteArrayOutputStream