是的,可以使用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
)來提高讀取性能,或者根據需要調整線程池的大小。