문제

나는 질문에 내 마음 쓰는 동안으로 파일을 닫기 전에 수행되어야 우리가 포함 flush()??.그렇다면 무엇을 할 것입니다 정확히?말라 스트림을 자동 플러시??편집:

그래서 플러시 그것이 무엇을 실제적으로 하는가?

도움이 되었습니까?

해결책

작가와 스트림은 일반적으로 일부 출력 데이터를 메모리에 버퍼링하고 한 번에 더 큰 블록으로 작성하려고합니다. 플러싱으로 인해 버퍼에서 즉시 디스크에 쓰기가 발생하므로 프로그램이 충돌하면 해당 데이터가 손실되지 않습니다. 물론 디스크가 데이터를 즉시 물리적으로 쓰지 않을 수 있으므로 여전히 손실 될 수 있으므로 보장은 없습니다. 그러나 그것은 Java 프로그램의 잘못이 아닙니다. :)

인쇄 작가는 종료 끝을 작성할 때 (기본적으로) 자동 플러시 (기본적으로)를 닫을 때 스트림과 버퍼를 플러시합니다. 그 외에는 버퍼가 가득 찬 경우에만 플러싱이 있습니다.

다른 팁

I would highly recommend 을 부르러 가깝습니다.기본적으로 쓴 나머지 bufferized 으로 데이터 파일입니다.

를 호출하는 경우 flush 명시적으로 당신 수 있는지 확인합니다 IOExceptionclose 은 정말 심각과 관련하여 풀어 시스템 리소스입니다.

할 때 flush 자신을 처리할 수 있습 그 IOException 과 같은 방법으로 당신을 처리하는 데이터 쓰기 예외가 있습니다.

Close ()가 당신을 위해 그것을 할 것이기 때문에 플러시를 할 필요가 없습니다.

Javadoc에서 :

"스트림을 닫고, 먼저 플러시합니다. 스트림이 닫히면 추가 write () 또는 flush () 호출이 IoException을 던지게됩니다. 그러나 이전에 폐쇄 된 스트림을 닫으면 효과가 없습니다."

Flush가 실제로 무엇을하는지에 대한 질문에 답하기 위해 스트림에 작성한 모든 것이 귀하의 경우 파일에 실제로 파일에 쓰여지는지 확인합니다.

Java는 버퍼링을 수행 할 수 있습니다. 즉, 일정량이있을 때까지 메모리로 작성된 데이터를 보유 한 다음 한 번에 파일에 모든 것을 작성하여 더 효율적입니다. 이것의 단점은 파일이 주어진 시간에 반드시 최신의 것은 아니라는 것입니다. 플러시는 "파일을 최신으로 만듭니다.

닫기가 먼저 플러시를 닫아 파일을 닫은 후 파일에 기대할 것으로 예상되는 것을 보장하므로 다른 사람들이 지적했듯이 닫기 전에 플러시 할 필요가 없습니다.

자동으로 플러시됩니다. 당신은 그것을 부를 필요가 없습니다.

다른 사람들이 말했듯이 가까운 곳 () 직전에 Flush ()를 호출 할 필요는 없습니다. Flush ()를 사용하는 시간은 파일을 열어두고 있지만 이전 쓰기가 완전히 완료되었는지 확인하려는 경우입니다.

말했듯이 보통 플러시 할 필요는 없습니다.

어떤 이유로 든 다른 프로세스에서 파일을 닫지 않고 파일의 전체 내용을 볼 수있는 다른 프로세스를 원한다면 만 의미가 있습니다. 예를 들어, 많은 관리가 있지만 여러 프로세스에 의해 동시에 수정 된 파일에 사용될 수 있습니다. :-)

FileWriter 명백한 숯불을 취하는 대신 모든 캐릭터 세트가 거기에있는 모든 캐릭터 세트를 선택할 때 악한 계급입니다. 기본값을 원하더라도 명시 적으로 명시하십시오.

일반적인 솔루션은입니다 OutputStreamWriter 그리고 FileOutputStream. 데코레이터가 예외를 던질 수 있습니다. 따라서 작가가 결코 건설되지 않더라도 스트림을 닫을 수 있어야합니다. 그렇게하려면 작가 (행복한 경우)를 플러시하고 항상 스트림을 닫으면됩니다. (혼란스러워지기 위해, 일부 데코레이터는 예를 들어 ZIP를 처리하기 위해 마감이 필요한 자원이 있습니다.)

프로그램의 플러싱을위한 또 다른 usecase는 긴 작업의 진행 상황을 파일로 작성하는 것입니다 (따라서 나중에 중지 및 다시 시작할 수 있습니다. 드라이브에서 데이터가 안전한지 확인하고 싶습니다.

while (true) {
  computeStuff();
  progresss += 1;
  out.write(String.format("%d", progress));
  out.flush();
}
out.close();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top