gpt4 book ai didi

java - Java 中的链接输入流

转载 作者:行者123 更新时间:2023-11-30 03:24:30 25 4
gpt4 key购买 nike

所以我知道 InputStream 将数据视为原始数据,而 Reader 将其视为字符。

缓冲它们将使事情变得更有效率。

但是像这样链接它们怎么样:

InputStream in = new InputStream(...);
in = new BufferedInputStream(in);
Reader r = new InputStreamReader(in);
r = new BufferedReader(r);

这是正确的吗?

最佳答案

Java 7 中,以下是一个应用程序示例,它使用 BufferedReaderInputStreamReader 组合到 BufferedInputStream 来读取 4MB 的文件并比较Java 7下bout技术的读取性能。

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class MainIO_Optimization {

public static void main(String[] args) {

BufferedInputStream bis = null;
InputStreamReader isr = null;
BufferedReader br = null;

try {

// ------ 1 ------
bis = new BufferedInputStream(new FileInputStream(new File("data/dictionnaire.txt")));
isr = new InputStreamReader(bis);
// ------ 2 ---------------
br = new BufferedReader(new FileReader("data/dictionnaire.txt"));

char[] buf = new char[10];


// ****** Performance *****

// we get system time
long startTime = System.currentTimeMillis();
// we simply read
while( br.read(buf) != -1 );
// print the time of execution
System.out.println("Time reading using BufferedReader with FileReader : "+ (System.currentTimeMillis()-startTime) + " ms" );



long startTime2 = System.currentTimeMillis();
while( isr.read(buf) != -1 );
System.out.println("Time reading using InputStreamReader with BufferedInputStream et FileInputStream : " + (System.currentTimeMillis() - startTime2 + " ms" ));


} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{

try {
if(bis != null)
bis.close();
if(isr != null)
isr.close();
if(br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
}

}
}

}

结果

Time reading using BufferedReader with FileReader : 31 ms

Time reading using InputStreamReader with BufferedInputStream et FileInputStream : 32 ms

如您所见,结果相差1 毫秒BufferedReader 速度更快。

<小时/>

Java 8中,您最好使用NIO包而不是IO。因此FileChannels将会更加高效。

关于java - Java 中的链接输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30593418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com