缓冲流
到目前为止,我们看到的大多数示例都使用无缓冲的I/O,这意味着每个读取或写入请求都由底层操作系统直接处理,这可以使程序效率低得多,因为每个这样的请求通常触发磁盘访问、网络活动或一些相对昂贵的其他操作。
为了减少这种开销,Java平台实现了缓冲的I/O流,缓冲输入流从称为缓冲区的内存区读取数据,仅当缓冲区为空时才调用原生输入API,类似地,缓冲输出流将数据写入缓冲区,并且仅在缓冲区已满时才调用原生输出API。
程序可以使用我们现在多次使用的包装习惯用法将无缓冲的流转换为缓冲流,将无缓冲的流对象传递给缓冲流类的构造函数,以下是如何修改CopyCharacters示例中的构造函数调用以使用缓冲I/O:
inputStream = new BufferedReader(new FileReader("xanadu.txt")); outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));
有四个用于包装无缓冲流的缓冲流类:BufferedInputStream和BufferedOutputStream创建缓冲的字节流,而BufferedReader和BufferedWriter创建缓冲的字符流。
冲洗缓冲流在关键点写出缓冲区通常是有意义的,而不是等待它被填满,这称为冲洗缓冲区。
一些缓冲的输出类支持autoflush,由可选的构造函数参数指定,启用autoflush时,某些关键事件会导致冲洗缓冲区。例如,自动冲洗PrintWriter对象在每次调用println或format时冲洗缓冲区,有关这些方法的更多信息,请参阅格式化。
要手动冲洗流,请调用其flush方法,flush方法在任何输出流上都有效,但除非流被缓冲,否则无效果。
上一篇:字符流 下一篇:扫描文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72965.html
摘要:的选择器允许单个线程监视多个输入通道。一旦执行的线程已经超过读取代码中的某个数据片段,该线程就不会在数据中向后移动通常不会。 1、引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本文中,将尝试用简明扼要的文字,阐明Java NIO和经典IO之...
摘要:线程之间的切换对于操作系统来说是昂贵的。因此,单线程可以监视多个通道中的数据。当方法返回后,线程可以处理这些事件。 一 NIO简介 Java NIO 是 java 1.4 之后新出的一套IO接口,这里的的新是相对于原有标准的Java IO和Java Networking接口。NIO提供了一种完全不同的操作方式。 NIO中的N可以理解为Non-blocking,不单纯是New。 它支持面...
摘要:异步可以让你异步的使用,例如当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。因此,单个的线程可以监听多个数据通道。下面是系列文章的目录概述通道之间的数据传输与原文译者郭蕾校对方腾飞 Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的...
摘要:学习和掌握技术已经不是一个攻城狮的加分技能,而是一个必备技能。是双向的,不仅可以读取数据还能保存数据,程序不能直接读写通道,只与缓冲区交互为了让大家不被高并发与大量连接处理问题所困扰,动力节点推出了高效处理模型应用教程。 大家肯定了解Java IO, 但是对于NIO一般是陌生的,而现在使用到NIO的场景越来越多,很多技术框...
摘要:通道可以异步读写。使用的方法读取数据创建一个读数据缓冲区对象从通道中读取数据使用的方法写入数据创建一个写数据缓冲区对象写入数据关闭完成使用后,您必须关闭它。五提供了一种被称为的新功能,也称为本地矢量。功能是通道提供的并不是。 历史回顾: Java NIO 概览 Java NIO 之 Buffer(缓冲区) 其他高赞文章: 面试中关于Redis的问题看这篇就够了 一文轻松搞懂redis集...
阅读 2156·2019-08-30 15:54
阅读 1905·2019-08-30 13:49
阅读 615·2019-08-29 18:44
阅读 789·2019-08-29 18:39
阅读 1060·2019-08-29 15:40
阅读 1483·2019-08-29 12:56
阅读 3083·2019-08-26 11:39
阅读 3030·2019-08-26 11:37