java网络编程--流

   网络程序所做的工作大部分都是简单的输入和输出:将数据字节从一个系统移动到另一个系统。很大程度上来说,读取服务器发送给你的数据和读取文件没有什么不同。java的I/O是建立在流之上的。

   用输入流读取数据,用输出流写入数据。针对不同的数据源,java提供不同的流比如说:FileInputStream ,TelnetOutPutStream等。

    java提供过滤器流,可以修改数据或者只是提供额外的方法,也提供阅读器reader和书写器 writer,允许读取字符而不是字节。IO流的类结构图

可以看出流

按输入输出的类型可以分成字节流(outputstream/inputStream)和字符流。(reader/writer)

按照流向可以分成输出流。(outputstream/writer) 和输入流(reader/inputStream);

按照功能可以分成节点流和处理流。

节点流就是直接操作文件 、网络比如说fileinputStream ,teletoutputstream;

常用的节点流

  1.   父 类 InputStream OutputStream Reader Writer
  2.   文 件 *FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流
  3.   数 组 *ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)
  4.   字符串 *无  无 StringReader StringWriter 对字符串进行处理的节点流
  5.   管 道 *PipedInputStream PipedOutputStream PipedReader PipedWriter 对管道进行处理的节点流

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

  1.       父 类 InputStream OutputStream Reader Writer
  2.   缓冲流 *BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter ----需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用flush方法咯
  3.   转换流 *InputStreamReader OutputStreamWriter- 要inputStream或OutputStream作为参数,实现从字节流到字符流的转换
  4.   数据流 *DataInputStream DataOutputStream -提供将基础数据类型写入到文件中,或者读取出来,为什么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就完了。。是不是既节约了内存空间有让程序写起来更加方便简单了呐。写倒是很简单,但是读取的时候就注意了,根据读取的数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成你正确的需求。

流是同步的,当程序请求一个流读写一段数据的时候,在做任何其他操作之前,它要等待所读/写的数据。java还支持用通道和缓冲区的非阻塞的IO。

 

  

   

 

posted @ 2017-03-24 12:15  王小丸子  阅读(270)  评论(0编辑  收藏  举报