Java IO는 큰 지식입니다.
지식 요점을 분해하고 그것에 대해 이야기하면 아마 일주일 일 것입니다. IO 시스템의 경우 다음 사진을 살펴볼 수 있습니다.
다음으로 코드 한 장으로 시작하겠습니다. 다음 코드를 살펴 보겠습니다.
public class test {public static void main (String [] args)은 예외 {file file = new File ( "text.txt"); if (! file.exists ()) {file.createnewfile (); } fileoutputStream fos = 새 FileOutputStream (파일); BufferedOutputStream BOS = New BufferedOutputStream (FOS); 바이트 [] B = 새로운 바이트 [1024]; bos.write (b); bos.flush (); }} 버퍼링 스트림은 코드에 구성되며 KB 길이 데이터가 스트림에 기록되고 마지막으로 Flush () 메소드가 호출됩니다.
이것은 매우 간단한 코드이며 최종 출력은 1kb text.text 파일을 생성하는 것입니다.
그러나 우리가 마지막 줄에 댓글을 달면
//bos.flush ();
최종 생성 된 Text.Text 크기는 0이됩니다.
이 결과는 매우 분명하지만 flush ()을 닫기 ()로 변경하면 결과가 여전히 0입니까?
플러시 정보
Flush ()는 실제로 네트워크 전송에서 발견되었습니다. 오래 전에
당시 효율성을 위해 서버와 클라이언트는 생성 될 때마다 데이터 조각을 전송하지 않습니다.
대신 버퍼가 작성되고 버퍼가 가득 찬 후 클라이언트로 데이터가 전송됩니다.
때로는 그런 문제가 있습니다. 데이터가 버퍼를 채우기에 충분하지 않고 클라이언트에게 데이터를 전송 해야하는 경우이 문제를 해결하기 위해 플러시 개념이 있으며 버퍼 데이터가 전송되어야합니다.
위의 질문으로 돌아가서 플러시를 닫기로 바꾸는 것이 가능합니까?
대답은 예입니다.
소스 코드를 보면 BufferedOutputStream의 상속 관계를 알 수 있습니다.
공개 클래스 BufferOutputStream은 FilterOutputStream을 확장합니다
BufferedOutputStream은 Close () 메소드를 구현하지 않으므로 FilterOutputStream의 Close ()을 직접 호출하고 FilterOutputStream의 Close () 메소드가 Flush ()을 호출하여 버퍼 데이터를 출력합니다.
실제 개발에서 IO 운영과 관련하여 Close () 방법을 결국 호출해야한다는 점이 강조됩니다. 위의 예는 이유 중 하나입니다.