陆小曼|Java IO,讲的实在是太好了,这篇( 五 )


(7)DataInputStream
数据输入流 , 它同样是一种处理流 , 对节点流进行封装后 , 能够在内部对读入的字节转换为对应的Java基本数据类型 。
(8)SequenceInputStream
将两个或多个输入流看作是一个输入流依次读取 , 该类的存在与否并不影响整个IO生态 , 在程序中也能够做到这种效果
(9)StringBufferInputStream
将字符串中每个字符的低8位转换为字节读入到字节数组中 , 目前已过期
InputStream总结:
InputStream是所有输入字节流的抽象基类ByteArrayInputStream和FileInputStream是两种基本的节点流 , 他们分别从字节数组和本地文件中读取数据DataInputStream、BufferedInputStream和PushBackInputStream都是处理流 , 对基本的节点流进行封装并增强PipiedInputStream用于多线程通信 , 可以与其它线程公用一个管道 , 读取管道中的数据 。 ObjectInputStream用于对象的反序列化 , 将对象的字节数据读入内存中 , 通过该流对象可以将字节数据转换成对应的对象OutputStreamOutputStream是字节输出流的抽象基类 , 提供了通用的写方法 , 让继承的子类重写和复用 。
方法功能publicabstractvoidwrite(intb)将指定的字节写出到输出流 , 写入的字节是参数b的低8位publicvoidwrite(byteb[])将指定字节数组中的所有字节写入到输出流当中publicvoidwrite(byteb[],intoff,intlen)指定写入的起始位置offer , 字节数为len的字节数组写入到输出流当中publicvoidflush()刷新此输出流 , 并强制写出所有缓冲的输出字节到指定位置 , 每次写完都要调用publicvoidclose()关闭此输出流并释放与此流关联的所有系统资源
OutputStream是所有输出字节流的抽象基类ByteArrayOutputStream和FileOutputStream是两种基本的节点流 , 它们分别向字节数组和本地文件写出数据DataOutputStream、BufferedOutputStream是处理流 , 前者可以将字节数据转换成基本数据类型写出到文件中;后者是缓冲字节数组 , 只有在缓冲区满时 , 才会将所有的字节写出到目的地 , 减少了IO次数 。 PipedOutputStream用于多线程通信 , 可以和其它线程共用一个管道 , 向管道中写入数据ObjectOutputStream用于对象的序列化 , 将对象转换成字节数组后 , 将所有的字节都写入到指定位置中PrintStream在OutputStream基础之上提供了增强的功能 , 即可以方便地输出各种类型的数据(而不仅限于byte型)的格式化表示形式 , 且PrintStream的方法从不抛出IOEception , 其原理是写出时将各个数据类型的数据统一转换为String类型 , 我会在讲解完字符流对象字符流对象也会有对应关系 , 大多数的类可以认为是操作的数据从字节数组变为字符 , 类的功能和字节流对象是相似的 。
字符输入流和字节输入流的组成非常相似 , 字符输入流是对字节输入流的一层转换 , 所有文件的存储都是字节的存储 , 在磁盘上保留的不是文件的字符 , 而是先把字符编码成字节 , 再保存到文件中 。 在读取文件时 , 读入的也是一个一个字节组成的字节序列 , 而Java虚拟机通过将字节序列 , 按照2个字节为单位转换为Unicode字符 , 实现字节到字符的映射 。
重要方法方法功能publicintread(java.nio.CharBuffertarget)将读入的字符存入指定的字符缓冲区中publicintread()读取一个字符publicintread(charcbuf[])读入字符放入整个字符数组中abstractpublicintread(charcbuf[],intoff,intlen)将字符读入字符数组中的指定范围中