필자는 병렬로 읽고 입력 한 파일을 여러 개 읽었습니다. 그러나 모든 파일 (모든 파일)의 모든 행에 대해 약 100 개의 파일 중 하나에 액세스하여 전체를 반복하고 모든 조합을 출력 파일에 작성해야합니다.동일한 파일에서 여러 스트림을 읽는 중
그래서, 기본적으로, 나는 (내가 코드 만의 중요한 부분 추가 한, 주) 이런 일이 : 두 개의 입력 파일을 읽을 수 있다는 것입니다,
int numberOfFiles = (int) new File("path/").listFiles().length;
IntStream.range(0, numberOfFiles).parallel().forEach(k -> {
BufferedWriter bw = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File("priorityQueuePreTerminal"+k+".txt")));
bw = new BufferedWriter(new FileWriter(new File("priorityQueuePostTerminal"+k+".txt"), true));
...
try {
while((line = br.readLine()) != null){
...
BufferedReader br2 = new BufferedReader(new FileReader(new File("shared/"+i+".txt")));
while((line2 = br2.readLine()) != null){
bw.write(...);
}
}
} catch (Exception e) { } finally { br2.close(); }
} catch (Exception e) { } finally { br.close(); bw.close(); }
});
본질적으로 어떻게됩니까을 같은 시간에 수백 개의 공유 파일 중 하나를 공유합니다. 결과적으로, 출력 파일 중 하나는 항상 완료되어야합니다. 다른 모든 출력 파일은 시작하는 몇 줄 밖에 없지만 중간에 끝납니다.
여러 스트림에서 동일한 공유 파일을 읽을 수도 있습니다 (동일한 파일을 여러 파일로 읽는 것이 좋았지 만 문제가 될 수 있음). Java 8 스트림에 synchronized
에 해당하는 것이 있습니까? 하나의 스트림이 현재 하나의 파일에서만 읽히고 있는지 확인하려면?
Java 8을 사용하는 경우 [try-with-resources] (https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)를 사용하여 스트림을 올바르게. –
이것은'java8 stream'이 아니며, 코드는 java7와 java8 사이에 있으며,'{} '을 사용하면 한 줄 이상 사용하지 않는 것이 좋습니다. – emotionlessbananas
한 파일을 읽고 다른 파일에 쓰려고하십니까? – emotionlessbananas