JAVA缓冲区就是先读一些数据在内存中间或者先写一部分数据在内存中。比如写,不是每次写数据到磁盘, 而是先把数据写到内存中,等到内存的缓冲区满了再一次写入磁盘,减少磁盘访问。JAVA读取大文需要使用radomAccessFile
与NIO
。InputStreamReader
是字节流通向字符流的桥梁:它使用指定的 charset
读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。 每次调用InputStreamReader
中的一个 read()
方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。 为了达到最高效率,可要考虑在 BufferedReader
内包装 InputStreamReader
。例如: BufferedReader in = new BufferedReader(new InputStreamReader);
import java.io.*;
import java.io.DataInputStream;
public class Main{
public static void main(String[] args) throws Exception {
BufferedReader reader= new BufferedReader(new InputStreamReader(new FileInputStream(new File("text.txt"))));
String line=null;
while((line=reader.readLine())!=null){
String[] s=line.split("\\s+");
for ( String single:s ) {
System.out.println(single);
}
}
}
}
(System.in));
\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格。InputStreamReader 中的一个 read()是每次都会从磁盘里面读取一个字节。
关于flush方法:
每一个IO流都有自己的缓冲区。
flush本意是冲刷,这个方法大概取自它引申义冲马桶的意思,马桶有个池子,你往里面扔东西,会暂时保存在池子里,只有你放水冲下去,东西才会进入下水道。
同理很多流都有一个这样的池子,专业术语叫缓冲区,当你print或者write的时候,会暂时保存在缓冲区,并没有发送出去,这是出于效率考虑的,因为数据不会自己发送过去,必须有其他机制,而且这个很消耗资源,就像马桶你需要很多水,才能冲走,你如果扔一点东西,就冲一次水,那你水费要爆表了,同样如果你写一行文字,或者一个字节,就要马上发送出去,那网络流量,CPU使用率等等都要爆表了,所以一般只有在你真正需要发送否则无法继续的时候,调用flush,将数据发送出去。
flush的作用就是强制清空缓存,
写入IO,比如如果写操作之后程序不是对应着输出流的关闭,而是进行其他阻塞式的操作(比如从输入流里面读数据),
这个时候缓存数据就直接丢失。这个时候记住要flush一下,
只有这样服务端才能收到客户端发送的数据,否则可能会引起两边无限的互相等待
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。