java - 读取大于内存的大文件怎么读?
PHP中文网
PHP中文网 2017-04-18 10:55:16
0
6
946
参考:
    有一个1G大小的一个文件,内存限制大小是10M,有序返回频数最高的50个词,该怎么做?

网上有很多该问题的解决方案,都是用分而治之的思想,提到了遍历整个文件。

那么我的问题是:
如果单纯地逐行读取大文件,算是把1G文件全都加载进内存吗?
或者说是读取大于内存的文件应该怎么读?

PHP中文网
PHP中文网

认证0级讲师

모든 응답(6)
黄舟

여기서 메모리는 파이프와 같습니다. 한 줄씩 읽는 것은 1G 파일을 메모리에 전달하는 것입니다. 10M은 파이프의 두께를 나타냅니다.
따라서 한 줄씩 읽으려면 1G 파일加载进去过 메모리가 필요합니다.

伊谢尔伦

으아아아

아무리 파일이 크더라도 각 줄의 길이가 제한되어 있는 한 전체 파일을 읽는 데는 많은 시간이 걸리지만 메모리를 많이 차지하지는 않습니다.

伊谢尔伦

청크로 읽고 청크마다 하나의 결과 세트를 읽고 최종적으로 결과 세트를 집계합니다
텍스트를 처리할 때 줄 수를 아는 것이 더 좋습니다

小葫芦

linux위의 split라는 명령이 있는데, 큰 텍스트를 작은 파일로 빠르게 동시에 분할할 수 있는데, 이 알고리즘을 외부 정렬이라고 합니다

刘奇

기억은 글을 다 쓰고 나면 넘기는 종이와 같습니다. 사용된 데이터와 사용되지 않은 데이터는 폐기됩니다.

간단한 예로 변수 버프를 만들고 크기를 설정한 후 파일 스트림을 열고 채워넣습니다. 채워 넣은 후 원하는 내용을 확인하면 다른 변수에 계산됩니다. 그런 다음 버프를 지우고 이전에 읽은 위치에서 다시 콘텐츠를 계속 로드합니다... 읽기가 완료될 때까지 통계가 완료됩니다.

阿神

다른 시스템의 경우 메모리보다 큰 파일을 작동할 수 있는 API가 제공됩니다. 즉, 파일이 메모리로 처리됩니다.

内存映射

  • mmap

  • 파일 매핑 생성

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!