是的,可以使用InputStreamReader
結(jié)合多線程來實現(xiàn)數(shù)據(jù)讀取。這里是一個簡單的示例,展示了如何使用兩個線程分別從不同的輸入流中讀取數(shù)據(jù):
import java.io.*;
import java.util.concurrent.*;
public class MultiThreadedStreamReader {
public static void main(String[] args) throws IOException, InterruptedException {
// 創(chuàng)建兩個輸入流
InputStream inputStream1 = new FileInputStream("input1.txt");
InputStream inputStream2 = new FileInputStream("input2.txt");
// 使用InputStreamReader將輸入流轉(zhuǎn)換為字符流
InputStreamReader inputStreamReader1 = new InputStreamReader(inputStream1);
InputStreamReader inputStreamReader2 = new InputStreamReader(inputStream2);
// 創(chuàng)建線程任務(wù)
Callable<String> task1 = () -> readFromStream(inputStreamReader1);
Callable<String> task2 = () -> readFromStream(inputStreamReader2);
// 使用ExecutorService執(zhí)行線程任務(wù)
ExecutorService executorService = Executors.newFixedThreadPool(2);
Future<String> result1 = executorService.submit(task1);
Future<String> result2 = executorService.submit(task2);
// 獲取線程任務(wù)的結(jié)果并輸出
System.out.println("Result from thread 1: " + result1.get());
System.out.println("Result from thread 2: " + result2.get());
// 關(guān)閉資源
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();
}
}
在這個示例中,我們創(chuàng)建了兩個輸入流inputStream1
和inputStream2
,分別讀取兩個不同的文件。然后,我們使用InputStreamReader
將輸入流轉(zhuǎn)換為字符流。接下來,我們創(chuàng)建了兩個線程任務(wù)task1
和task2
,分別調(diào)用readFromStream
方法從輸入流中讀取數(shù)據(jù)。最后,我們使用ExecutorService
執(zhí)行線程任務(wù),并獲取結(jié)果輸出。
請注意,這個示例僅用于演示目的。在實際應(yīng)用中,您可能需要根據(jù)具體需求對代碼進行調(diào)整。例如,您可以使用緩沖流(如BufferedReader
)來提高讀取性能,或者根據(jù)需要調(diào)整線程池的大小。