찾다

 >  Q&A  >  본문

java - bufferedinputstream也需要指定一个数组长度呀?并没有什么用呀?

他与fileinputstream 的区别是什么呀?他不是自带缓冲区吗?为什么还需要指定一个byte数组?

PHP中文网PHP中文网2784일 전692

모든 응답(3)나는 대답할 것이다

  • 阿神

    阿神2017-04-17 17:50:10

    자신의 캐시와 나만의 캐시는 동일한 개념이 아닙니다. 일반적인 과정은 다음과 같습니다.

    캐싱 없이 입력스트림을 사용하는 경우

    읽을 때마다 시스템은 읽기 작업을 수행하여 데이터를 읽습니다. 읽을 바이트를 지정하면 1바이트를 읽고, 배열을 지정하면 배열을 읽습니다. 프로그램과 데이터의 차이 읽기 효율성은 큰 관계가 있습니다.

    그리고

    을 사용하면 이런 모습이 됩니다bufferedinputstream

    을 생성하면 bufferedinputstream 즉시 데이터를 읽어서 jvm이 관리하는 메모리에 넣습니다. 읽을 때마다
    다시는 해당 위치로 이동하지 않습니다. .시스템에서 읽을 때 메모리 의 데이터를 읽은 다음 메모리에 충분한지 여부를 판단합니다. 그렇지 않으면 바이트를 읽는지 여부에 관계없이 시스템에 작업을 읽도록 지시합니다. 또는 어레이. 시스템이 하드 디스크를 작동하지 않을 수도 있습니다 .
    귀하의 프로그램과 데이터 읽기 효율성 사이의 상관관계는 매우 작습니다.

    다른 관점에서 생각해보면

    버퍼가 없는 스트림을 사용한다면 파일을 연 뒤 바로 닫으면 시스템이
    어떤 데이터 호출도 하지 않고 닫히게 된다. 빨리 실행됨. 그리고 버퍼링된 스트림을 사용하여 파일을 여는 경우 읽지 않고 즉시 닫혀도 닫기가 즉시 실행되지 않으며
    시스템이 이미 데이터의 일부를 메모리로 읽어 들였습니다 버퍼 없이 사용하는 것보다 효율성이 떨어집니다.

    물론 스트림을 생성한 다음 읽지 않고 닫을 만큼 심심한 사람은 없을 것입니다. 그렇죠?

    회신하다
    0
  • PHPz

    PHPz2017-04-17 17:50:10

    버퍼링과 배열을 사용하여 콘텐츠를 수신하는 것 사이에는 관계가 없습니다. 그렇다고 해서 버퍼링을 사용하면 배열이 콘텐츠를 수신할 필요가 없다는 의미는 아닙니다.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:50:10

    우리는 이 바이트[]를 재사용하기를 희망하기 때문에 그렇지 않으면 대규모 데이터 스트림 IO 전송에 직면할 때 YGC가 매우 기뻐할 것입니다

    회신하다
    0
  • 취소회신하다