2016-11-05 5 views
-1

버퍼링 된 스트림을 사용하는 경우, 예를 들어 FileOutputStream입니다.java IO 스트림을 플러시 할 때 어떤 일이 발생합니까?

BufferedOutputStream bf = new BufferedOutputStream(new FileOutputStream(fileName)); 

한 스트림에 32 바이트를 기록한다라고 할 수 있으며 그 후에 flush() 메소드를 호출한다. 다른 StackOverflow 답변에 따르면 32 바이트는 OS 메모리에 전달/복사됩니다.

이제 사실이라면 OS에 의존하지 않았습니까? 예 : 우리가 창문에서 이걸 돌리고 있다면 파일 데이터를 관리하기위한 시스템 캐시도 있습니다. OS가 해당 데이터를 파일로 플러시 할 때까지 기다릴 필요가 없다는 것입니다. 실제로 32 바이트가 디스크에 실제로 기록되는 지점입니까? 아니면 내가 여기 잘못한거야?

답변

0

스트림에 32 바이트를 쓰고 그 후에 flush() 메서드를 호출한다고 가정합니다. 다른 StackOverflow 답변에 따르면 32 바이트는 OS 메모리에 전달/복사됩니다.

찾고 계시는 단어는 보통 write() API 또는 동급의 'written'입니다.

이제 이것이 사실이라면 OS에 의존하지 않았습니까? 예 : 우리가 창문에서 이걸 돌리고 있다면 파일 데이터를 관리하기위한 시스템 캐시도 있습니다. OS가 해당 데이터를 파일로 플러시 할 때까지 기다릴 필요가 없다는 것입니다. 실제로 32 바이트가 디스크에 실제로 기록되는 지점입니까? 아니면 내가 여기 잘못한거야?

틀렸어. 발생하는 모든 것은 write()입니다.

+0

aha, 그래서 flush를 호출하면 데이터가 OS 메모리에 기록되고 OS가이 데이터를 디스크에 기록하도록 통보됩니까? –

+0

'일어나고있는 것'의 어떤 부분이'write()'라고 이해하지 못합니까? – EJP

+0

그래, 내가 질문을 바꿔 말할거야, Java에서 쓰는 것은 무엇을 의미합니까? JVM 메모리 공간에서 직접 디스크에 쓰거나? 즉, JVM이 디스크에 쓰기 작업을 수행합니까? –

관련 문제