节点流和处理流

来源:互联网 发布:mac装virtualbox 编辑:程序博客网 时间:2024/06/05 22:51
JAVA IO 操作总结——节点流和处理流 
 
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。 
 
  节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader 
 
  处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。
如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过
其他流的多次包装,称为流的链接。 
 
  常用的节点流 
父  类  InputStream OutputStream Reader Writer 
文  件  *FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流 
数  组  *ByteArrayInputStream  ByteArrayOutputStream  CharArrayReader  CharArrayWriter 
对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组) 
字符串  *无    无  StringReader StringWriter 对字符串进行处理的节点流 
管  道  *PipedInputStream  PipedOutputStream  PipedReader  PipedWriter 对管道进行处
理的节点流 
 
  常用处理流(关闭处理流使用关闭里面的节点流) 
父  类  InputStream OutputStream Reader Writer 
缓冲流  *BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter ----需
要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由
于带了缓冲功能,所以就写数据的时候需要使用flush方法咯 
转换流  *InputStreamReader  OutputStreamWriter-  要inputStream 或OutputStream作为
参数,实现从字节流到字符流的转换 
数据流  *DataInputStream DataOutputStream -提供将基础数据类型写入到文件中,或者
读取出来,为什么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身
只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占
用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就完了。。是不是既
节约了内存空间有让程序写起来更加方便简单了呐。写倒是很简单,但是读取的时候就注意
了,根据读取的数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成
你正确的需求。 
 
  *ObjectInputStream ObjectOutputStream 
 
  *顺便研究序列化---将对象所在的类型全部转换成二进制,然后写入到介质中去 
 
  *transient关键字--修饰成员变量,不写入该成员变量 
 
  *Serializable接口--表示接口,怎样实现的呢,在序列化之前,首先判断 (对象  instanceof 
Serializable)如果返回true则执行序列化,否者抛出异常,并且里面有一个ID,是用来快速
查找某个对象的时候使用的 
 
  *Externalizable接口--外部化接口;他是Serializable接口的子接口,能手动控制序列化
的方式 
 
  为什么要用writeUTF()--因为这种方式是按照utf-8来写入的,而默认方式是utf-16只是
节省空间而已 
 
  --字节流读取中文的问题 
 
  *由于java 使用的是unicode编码,每一个中文字符是占用两个字节的,所以没有只读
出其中一个字节并使用的话当然是乱码咯,虽然普通的英文字符也是两个字节的,但是读取
的时候将高8位去掉也能回去正确的英文字符,所以没有问题,所以最好还是使用字符流的
方式读取好点 
 
  --java.io 中专门提供用于打印的流(这类流在写入的时候有自动flush 的功能,所以你不
需要每打印一个东西都flush 一次)--------注意他们也是属于处理流,只不过这里单独列出来
分析而已 
 
*PrintStream--继承自-->FilterOutputStream--继承自-->OutputStream,(它的构造函数需要
OutputStream对象) 
 
*  PrintWriter---继承自-->Writer(它的构造函数需要Writer对象) 
 
  System.In====InputStream 
 
  System.Out===PrintStream 
 
  这种流的print方法不会抛出异常,这是JSP技术中常用的流,如果在JSP页面的打印会
抛出异常的话,那JSP也太难写了点!注意理解这样的设计思路 
 
  --看这样的代码 
 
  PrintStream ps=new PrintStream(new OutputStream("c://...")); 
 
  System.setOut(ps); 
 
  System.Out.println("jfdajsflkajdf");//这样将不会在打印到命令行窗口,而是指定的
PrintStream目标文件里面去 
原创粉丝点击