최근에, 나는 IO 스트림을 배우고 있었고 플러시 () 함수가 매번 나타나는 것을 발견했습니다. 나는 그 기능을 확인했고 주요 기능은 다음과 같습니다.
//――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――�
일반적이고 잘못된 답변 :
버퍼의 데이터는 버퍼가 가득 찰 때까지 저장됩니다. 플러시 메소드를 사용하여 버퍼의 데이터를 강제로 작성하거나 Close () 메소드를 사용하여 스트림을 닫을 수도 있습니다. 스트림을 닫기 전에 버퍼 출력 스트림은 한 번에 버퍼 데이터를 기록합니다. Flash () 및 Close ()는 둘 다 데이터를 작성하도록 강요하므로 두 결과는 동일합니다. 글을 쓰지 않으면 성공적으로 작성할 수 없다는 것을 알게 될 것입니다.
위의 답변에 대한 응답으로 정확한 답변이 주어졌습니다.
FileOutputStream은 outputStream을 상속하고 Flush () 메소드를 다시 쓰지 않습니다. 따라서 컨텐츠가 얼마나 쓰여 있더라도 바이너리 스트림을 기본 운영 체제의 I/O로 직접 전달합니다. 플러시는 효과가 없습니다. 버퍼링 된 시리즈의 입력 및 출력 스트림 함수는 버퍼를 사용하는 단어로부터 볼 수 있습니다. 응용 프로그램은 IO가 매우 낮을 때마다 장치와 통신해야합니다. 따라서 효율을 향상시키기 위해 버퍼는 장치에 쓸 때 먼저 버퍼에 기록됩니다. 버퍼에 충분한 데이터가 있으면 장치 전체에 기록됩니다.
bufferedxxxstream을 사용하십시오. 기본 버퍼 크기는 8K입니다. 읽을 때 버퍼가 항상 채워집니다 (또는 파일이 읽습니다). 쓰기시, 버퍼가 가득 찬 후 컨텐츠가 커널 버퍼로 전송됩니다 (또는 플러시 작동). 고효율의 이유는 모든 바이트 읽기에 대한 운영 체제 커널에 빠지지 않기 때문입니다 (시간이 많이 걸리는 작업입니다). 특정 코드는 API를 직접 확인하십시오.
또한 바이두의 질문 답변도 첨부하겠습니다.
Flush ()는 버퍼의 내용을 기록하도록 강제하는 것을 의미합니다. 운영 체제의 특정 메커니즘으로 인해 지속적인 디스크 읽기 및 쓰기를 방지하기 위해 글쓰기 지연의 개념이 있습니다. (Fruit () Refresh와 혼동하지 않도록주의하십시오.) 주로 IO에서 사용됩니다. 즉, 버퍼 데이터를 지우십시오. 일반적으로 스트림을 읽고 쓰면 데이터가 먼저 메모리로 읽은 다음 파일에 기록됩니다. 메모리 버퍼에 남겨질 수있는 일부가 있기 때문에 데이터가 작성되었음을 의미하지는 않습니다. 이 시점에서 Close () 메소드를 호출하고 읽기 및 쓰기 스트림을 닫으면 데이터 의이 부분이 손실되므로 읽기 및 쓰기 스트림을 닫기 전에 ()을 플러시해야합니다. .
네트워크 웹 서버에서도 마찬가지입니다. 바이트를 작성한 후 메시지가 전송되는 것을 방지하기 위해 64K 메모리 영역과 같은 버퍼의 개념이 있습니다. 버퍼가 가득 차면 디스크에 한 번에 디스크에 기록됩니다 (또는 클라이언트 브라우저로 전송).
플러시 방법은 일반적으로 프로그램이 작성 될 때 실행됩니다. 그런 다음 가까운 방법을 따르십시오. 예를 들어:
// 출력 스트림을 가져옵니다. 물론 특정 환경에 따라 다릅니다. printwriter out = util.getwriter (); out.println ( "정보를 출력, 아마도 많은 정보"); out.flush (); out.close ();
간단히 말해서, Flush () 메소드는 메모리에 저장된 모든 내용을 출력하는 것입니다 (배치 출력). 예를 들어, 일반적으로 사용되는 것은 filewriter 클래스의 전형적인 예입니다. 플러시 출력을 사용하는 것 외에도 닫기 메소드에 대한 최종 호출은 배치 출력도됩니다.
import java.io.filewriter; import java.io.ioexception; public class a04 {public static void main (String args []) {filewriter fw; try {fw = new filewriter ( "c : //try.txt"); fw.write ( "hello"); // fw.close (); //이 문장이 추가되지 않고 파일을 작성할 수없고 파일이 비어 있습니다! System.out.println ( "OK"); } catch (ioexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); }}}요약
위의 것은 Java 언어로 된 플러시 기능의 역할 및 사용 방법에 대한이 기사의 모든 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!