《JAVA网络编程》阅读笔记(三)

              Java的I/O建立于流上。输入流读取数据;输出流写入数据。所有的输出流/输入流都有相同的基本方法来写入/读取数据。

              过滤器流可以链接到输入流或输出流上。过滤器可以在读写时修改数据或者只是提供额外的方法,将读写的数据转换为其他格式。

              阅读器和书写器可以链接到输入流和输出流上,可以读写文本(即字符)而不是字节。

              流是同步的:当线程请求一个流读写一部分数据时,在进行任何其他操作前,它要等待被读写的数据。


1、输入流:Java的基本输入流是java.io.InputStream:

                     public abstract class InputStream

                   这个类提供了将数据读取为原始字节所需的基本方法:

                   

             InputStream的具体子类使用这些方法从某种媒介中读取数据。基本方法是没有参数的read()方法,声明为抽象方法,这个方法从输入流的院中读取一个字节数据,作为一个0-255的int返回。流的结束由返回-1表示。read()方法会等待并阻塞其后任何代码的执行,直到有一字节的数据可用,准备读取。若程序在进行其他重要的操作,尝试将 I/O放在自己的线程中。


2、输出流:java的基本输出流类是java.io.OutputStream:

                        public abstract class OutputStream

                       这个类提供了写入数据所需的基本方法:

                      

                    OutputStream的子类使用这些方法向某种媒体写入数据。基本方法是write(int  b),这个方法接受一个0-255之间的整数作为参数,将对应的字节写入到输出流中,声明为抽象方法。

                    为了提高效率,减少开销,大多数TCP/IP的实现都会在某种程度上缓存数据。即,它们在内存中积累数据,只有积累到一定量的数据后,或者经过了一段时间后,才将所积累的数据发送到最终目的地。

                       

3、过滤器流:Java提供了很多过滤器流,可以附加到原始流中,在原始字节和各种格式之间来回转换。过滤器有两个版本:过滤器流及阅读器和书写器。

      过滤器流主要将原始数据作为字节操作;过滤器以链的形式进行组织,链中的每个环节都接收前一个过滤器或流的数据,并把数据传递给链中的下一个环节。

      过滤器通过构造函数与流连接。

                 

4、缓冲流:BufferedOutputStream类将待写入的数据存储在缓冲区中,直到缓冲区满或刷新输出流。然后它将数据一次全部写入底层输出流。

                      BufferedInputStream类也有作为缓冲区的名为buf的保护字节数组。当调用某个流的read()方法时,它首先尝试从缓冲区获取请求的数据。只有当缓冲区没有数据时,流才从底层的源中读取。这是它会从源中读取尽可能多的数据进入缓冲区,而不管它是否马上需要多有的这些数据。

①、PrintStream:多数程序员会遇到的第一个过滤器输出流,因为System.out就是一个PrintStream。(编程尽可能不用,缺点太多)

②、PushbackInputStream:是FilterInputStream的子类。FilterInputStream提供了一个回压(pushback)堆栈,这样程序可以向输入流”unread“(压写)字节。这使得程序可以向运行中的流添加数据。它们在从底层输入流中读取前,会首先尝试从回压缓冲区中读取。实际上,这个缓冲区就是位于输入流顶部堆栈,只有当堆栈空时才会读取底层的流。

③、数据流:DataInputStream和DataOutputStream提供了一些方法,可以用二进制格式读写Java的简单数据类型和字符串。所用的二进制格式主要用于在两个不同的java程序之间交换数据,而无论是通过网络连接、数据文件、管道还是其他媒介。输出流写入什么市局,输入流就能够读取什么数据。

④、压缩流:java.util.zip包中包含压缩和解压zip、gzip及deflate格式流的过滤器流。除了广泛应用于文件外,这个包还允许java应用程序通过网络轻松地交换压缩数据。

⑤、摘要流:可以计算流的消息摘要(用于数字签名,检测数据是否遭到破坏)。DigestInputStream和DigestPutputStream。

⑥、加密流:javax.crypto包中的CipherInputStream和CipherPutputStream类提供了加密和解密服务。


4、阅读器和书写器:为了应对不同的编码方式,处理字节而不是字符。

①书写器:Writer类映射了java.io.OutputStream类。OutputStreamWriter是Writer的最重要的具体子类。OutputStreamWriter会从java程序接收字符,根据指定的编码方式将这些字符转换为字节,写入底层输出流中。

②阅读器:Reader类是java.io.InputStream类的镜像。

③过滤器阅读器和书写器:


④PrintWriter:能够正确处理多字节字符集和国际化文本。用来替代PrintStream。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值