是的,可以使用InputStreamReader
结合多线程来实现数据读取。这里是一个简单的示例,展示了如何使用两个线程分别从不同的输入流中读取数据:
import java.io.*;
import java.util.concurrent.*;
public class MultiThreadedStreamReader {
public static void main(String[] args) throws IOException, InterruptedException {
// 创建两个输入流
InputStream inputStream1 = new FileInputStream("input1.txt");
InputStream inputStream2 = new FileInputStream("input2.txt");
// 使用InputStreamReader将输入流转换为字符流
InputStreamReader inputStreamReader1 = new InputStreamReader(inputStream1);
InputStreamReader inputStreamReader2 = new InputStreamReader(inputStream2);
// 创建线程任务
Callable<String> task1 = () -> readFromStream(inputStreamReader1);
Callable<String> task2 = () -> readFromStream(inputStreamReader2);
// 使用ExecutorService执行线程任务
ExecutorService executorService = Executors.newFixedThreadPool(2);
Future<String> result1 = executorService.submit(task1);
Future<String> result2 = executorService.submit(task2);
// 获取线程任务的结果并输出
System.out.println("Result from thread 1: " + result1.get());
System.out.println("Result from thread 2: " + result2.get());
// 关闭资源
executorService.shutdown();
inputStreamReader1.close();
inputStreamReader2.close();
inputStream1.close();
inputStream2.close();
}
private static String readFromStream(InputStreamReader inputStreamReader) throws IOException {
StringBuilder result = new StringBuilder();
int character;
while ((character = inputStreamReader.read()) != -1) {
result.append((char) character);
}
return result.toString();
}
}
在这个示例中,我们创建了两个输入流inputStream1
和inputStream2
,分别读取两个不同的文件。然后,我们使用InputStreamReader
将输入流转换为字符流。接下来,我们创建了两个线程任务task1
和task2
,分别调用readFromStream
方法从输入流中读取数据。最后,我们使用ExecutorService
执行线程任务,并获取结果输出。
请注意,这个示例仅用于演示目的。在实际应用中,您可能需要根据具体需求对代码进行调整。例如,您可以使用缓冲流(如BufferedReader
)来提高读取性能,或者根据需要调整线程池的大小。