62,621
社区成员
发帖
与我相关
我的任务
分享
RandomAccessFile file = new RandomAccessFile("b.txt", "r");
FileChannel fileChannel = file.getChannel();
ByteBuffer buffer = ByteBuffer.allocateDirect((int) fileChannel.size());
fileChannel.read(buffer);
buffer.flip();
CharBuffer charBuffer = Charset.forName("utf-8").decode(buffer);
file.close();
BufferedReader bufferedReader = new BufferedReader(new StringReader(charBuffer.toString()));
List<String> list = new ArrayList<String>();
long time = System.currentTimeMillis();
String str = null;
while((str = bufferedReader.readLine()) != null){
list.add(str);
}
System.out.println(System.currentTimeMillis() - time);
FileReader
BufferedReader bufferedReader = new BufferedReader(new FileReader("b.txt"));
String str = null;
long time = System.currentTimeMillis();
List<String> list = new ArrayList<String>();
while((str = bufferedReader.readLine()) != null){
list.add(str);
}
System.out.println(System.currentTimeMillis() - time);
public static void main(String[] args) throws IOException {
RandomAccessFile file = new RandomAccessFile("1.txt", "r");
FileChannel fileChannel = file.getChannel();
//这个地方要按文件大小来,如果实在要定长就只能按先前说的,继续往后读到换行符
//或者把已经读过但是没有凑成正行的put回去,然后compact,再继续读
ByteBuffer buffer = ByteBuffer.allocateDirect((int) fileChannel.size());
fileChannel.read(buffer);
buffer.flip();
CharBuffer charBuffer = Charset.forName("utf-8").decode(buffer);
file.close();
BufferedReader bufferedReader = new BufferedReader(new StringReader(charBuffer.toString()));
String str = null;
while((str = bufferedReader.readLine()) != null){
System.out.println(str);
}
}
你是要这样?
什么叫做比BufferedReader慢,
你说的慢是因为平时用的时候,它的底层数据是从FileInputStream里面来的,
BufferedReader本身是跟Stream什么都没有关系的,
它只负责操作你给它的数据,
你给它数据的时候慢,当然它给你结果就慢
你把一个内存里面的字符串直接让BufferedReader读,那还会觉得慢?
public static void main(String[] args) throws IOException {
RandomAccessFile file = new RandomAccessFile("1.txt", "r");
FileChannel fileChannel = file.getChannel();
ByteBuffer buffer = fileChannel.map(MapMode.READ_ONLY, 0, fileChannel.size());
CharBuffer charBuffer = Charset.forName("utf-8").decode(buffer);
file.close();
BufferedReader bufferedReader = new BufferedReader(new StringReader(charBuffer.toString()));
String str = null;
while((str = bufferedReader.readLine()) != null){
System.out.println(str);
}
}
用BufferedReader包装一下就行了,
不过文件大了受不了,
你可以考虑每次读定长,
然后再往后一直读到换行符为止import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.charset.Charset;
List<String> lines = Files.readAllLines(Paths.get("D:/Temp", "examples.txt"), Charset.defaultCharset());