Stream<String>
을받는 함수가 있습니다. 이 스트림은 파일의 행을 나타냅니다 (Files.lines(somePath)
로 불림). 내가 파일 시스템에 여러 개의 물리적 파일로 스트림을 변환해야문자열 스트림을 그룹화 된 문자열 목록으로 변환하는 효과적인 방법
__HEADER__ # for file 1 data more data ... __HEADER__ # file 2 starts here some more data... ...
: 파일 자체는 실제로 하나의 파일로 여러 파일의 연결이 같은 것입니다.
String allLinesJoined = lineStream.collect(Collectors.joining());
// This solution seems to get stuck on the line above^
String files[] = allLinesJoined.split("__HEADER__");
for (fileStr : files)
{
// This function will write each fileStr to a separate file
// (filename is determined by contents of fileStr)
writeToPhysicalFile(fileStr);
}
그러나 입력 파일에 대한 300 ~ MB입니다 (더 큰 얻을 수)와이 솔루션은 1 일에 집착하는 것 같다
나는의 라인을 따라 뭔가, 간단한 접근 방법을 시도했습니다 선. 더 많은 기억이 있다면 아마도 끝날거야 ...?
시작 지점이 Stream<String>
인 경우 더 좋은 방법이 있습니까? 아니면 스트리밍 API를 사용하지 않고이 코드를 한 행씩 파일을 읽을 수 있도록 다른 변경을 시작해야합니까?
(라인의 순서는이 파일의 맥락에서, 중요합니까)
TL; DR
나는 많은 작은 파일에 Stream<String>
로 표현 하나 개의 큰 파일을 설정해야합니다. 각각의 작은 파일은 __HEADER__
으로 시작하고 모든 줄은 다음에 __HEADER__
까지 이어집니다. 현재 라이브러리는 스트림을 사용하여 파일을 제공하지만 스트림으로이 작업을 시도해 볼 가치가 있습니까? 그렇지 않으면 라이브러리를 변경하여 비 스트림 기능을 제공하면 내 인생이 더 쉬워 집니까?
가 최종 목표는 무엇인지에 약간의 혼동이있을 수 있습니다 (적어도 나는 혼란 스러워요). 문제는 이해하지만 원하는 해결책은 아닙니다. –
@ChrisThompson : 방금 그 사실을 깨달았습니다. 최근 편집으로 인해 더 명확 해졌습니다. – FrustratedWithFormsDesigner
스트림이이 용도로 설계되지 않았습니다. 스트림이 개별적으로 청크에 어떻게 영향을 미치는지 신경 쓰지 않는 조작을 위해 설계되었습니다. –