5 초마다 (예를 들어) 서버는 파일이 특정 디렉토리에 추가되었는지 확인합니다. '예'라고 답한 경우 해당 내용을 읽고 처리합니다. 관련 파일은 상당히 클 수 있습니다 (예 : 100+ Mo). 따라서 해당 디렉토리로 파일을 복사/업로드하는 것은 상당히 길 수 있습니다.파일 내용이 복사/업로드 완료되지 않은 상태에서 읽기
서버가 복사/업로드가 완료되지 않은 파일에 액세스하려고하면 어떻게됩니까? JAVA는 이러한 동시 액세스를 어떻게 관리합니까? 그것은 서버의 OS에 의존 하는가?
은 내 로컬 컴퓨터에 원격 서버에서 ~ 1,300,000 줄 TXT 파일 (즉, 약 200 모) 복사 시도했다 : 그것은 약 5 초 정도 걸립니다. 나는 다음과 같은 예외가 얻을
public static void main(String[] args) throws Exception {
String local = "C:\\large.txt";
BufferedReader reader = new BufferedReader(new FileReader(local));
int lines = 0;
while (reader.readLine() != null)
lines++;
reader.close();
System.out.println(lines + " lines");
}
:이 경과하는 동안, 나는 다음과 같은 자바 클래스 실행
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515)
at java.lang.StringBuffer.append(StringBuffer.java:306)
at java.io.BufferedReader.readLine(BufferedReader.java:345)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at main.Main.main(Main.java:15)
파일이 복사 완료되면 클래스를 실행, 내가 예상 출력을 얻을를 (즉, 1229761 lines
), 예외는 파일의 크기 때문이 아닙니다 (처음에 생각할 수있는 것처럼). JAVA가 배경으로 수행하고있는 것, 이건 예외입니까?
정품 OOME이 아닌지 확인하기 위해 많은 Xmx로 실행 해 보았습니까? – assylias
제 생각 엔 readLine()은 어떤 이유로 든 개행 문자를 찾지 못합니다 (새 줄 문자가 어떤 이유로 든 다르고, 다른 O.S. 또는 일부 인코딩 문제가 있기 때문일 수 있습니다). 한 번에 매우 큰 행을 읽는 것 같습니다. – ddmps
@assylias 최대 1Gb의 Java 힙 크기 (예 :'-Xmx1024m')로 시도했지만 예외가 여전히 발생합니다. – sp00m