메모리에 비해 너무 큰 파일을 어떻게 분석합니까?

testMyUnderstanding

최근에 저는 채용 담당자의 라이브 코딩 인터뷰 라운드에서 이 질문을 받았습니다. 나는 이것을 코드로 어떻게 해야 할지 확신이 서지 않았다.

파일을 여러 파일로 분할한 다음 여러 스레드를 통해 해당 청크를 읽는 것을 생각했습니다.

그러나 나는 같은 것을 구현할 수 없었습니다.

구현 또는 다른 접근 방식에 대한 도움을 주시면 감사하겠습니다!

로닌조

나는 "그것은 의존한다"라고 대답할 것이다. 인터뷰 시나리오에서 그들은 당신이 어디로 가는지 확인하기 위해 의도적으로 모호한 질문을 할 것입니다. 다른 사람들이 지적했듯이 파일에 대해 알아내고 파일에서 얻고자 하는 정보가 무엇인지 파악하는 것이 중요하며 잠재적 솔루션은 이러한 요인에 따라 크게 달라질 수 있습니다.

예를 들어 파일이 실제로 CSV이고 데이터(정렬, 개수, 집계 등)에 대해 잠재적으로 복잡한 분석을 수행하려는 경우 해당 파일을 H2와 같은 관계형 데이터베이스 테이블로 푸시하는 것은 나쁜 생각이 아닐 수 있습니다. . 파일에 더 많은 자유 형식 텍스트가 포함된 경우 Lucene으로 인덱싱하거나 ElasticSearch 인덱스에 푸시하고 Kibana로 찌를 수 있습니다.

그러나 이러한 솔루션 중 어느 것도 "코드로" 파일을 분석하지 않으며 파일이 100GB 동영상 클립인 경우 완전히 비효율적입니다. 그들이 "코드로" 파일을 분석하는 방법을 묻기 때문에 바이트 지향 I/O(예: Java InputStream) 대 문자 지향(예: 리더) 및 /또는 버퍼를 사용하여 잠재적으로 큰 파일을 읽는 방법(즉, 전체 파일을 메모리에 로드하지 않고).

다음은 간단한 코드 예입니다...

import java.io.*;

public class StreamFile {
    /** Stream through a file using a buffer. */
    final static int BUFSIZE = 1024; // Use a 1K buffer.

    public static void main(String[] args) throws Exception {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(args[0])));
        long totalBytes = 0;
        byte[] buf = new byte[BUFSIZE];
        while (bis.available() > 0) {
            totalBytes += bis.read(buf, 0, BUFSIZE); // Do something here with the data in buf.
            System.out.println(totalBytes); // Show progress.
        }
        System.out.println("Read " + totalBytes + " bytes");
        bis.close();
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Windows에서 두 개의 큰 파일을 바이너리 비교하려면 어떻게해야합니까?

Firefox / Chrome 웹 확장-콘솔에 비해 너무 큰 출력을 어떻게 저장합니까?

node.js에서 큰 TSV 파일을 어떻게 구문 분석합니까?

NaN / infinity / dtype ( 'float64')에 비해 너무 큰 numpy 배열의 값을 어떻게 찾습니까?

메모리에 비해 너무 큰 파일을 효율적으로 읽고 쓰는 방법은 무엇입니까?

파이썬에서 메모리 부족 없이 큰 파일을 어떻게 반복합니까?

기본 js 파일에서 OAuth 토큰을 어떻게 분리합니까?

매우 큰 파일에 해당하는 파이썬 "cksum"은 무엇이며 어떻게 작동합니까?

Linux에서 바이너리 파일을 어떻게 비교합니까?

파일을 토큰 벡터로 어떻게 구문 분석합니까?

XMLreader로이 큰 xml 파일을 어떻게 구문 분석합니까?

매우 큰 비디오 파일을 어디에서 어떻게 편집합니까?

데비안에서 무료가 아닌 펌웨어 파일을 보려면 어떻게해야합니까?

큰 txt 파일을 BigInteger에 빠르게로드하려면 어떻게해야합니까?

큰 세로 텍스트 파일을 헤더가있는 CSV 파일로 바꾸고 구문 분석하려면 어떻게해야합니까?

큰 해시 맵 대신 해시 배열을 얻는 방법으로 perl로 diffgam.xml 파일을 구문 분석하려면 어떻게해야합니까?

줄리아에서 메모리 매핑을 위해 파일을 만든 후 어떻게 삭제합니까?

feathersjs에서 요청 엔티티가 너무 큰 오류를 어떻게 해결합니까?

디렉토리의 파일 목록을 큰 따옴표로 출력하려면 어떻게해야합니까?

큰 FASTA 파일에 포함 된 서열의 아미노산 구성 비율을 어떻게 계산합니까?

C ++에서 CSV 파일을 읽고 구문 분석하려면 어떻게해야합니까?

Python이 더 큰 파일을 너무 느리게 복사합니다.

Prolog의 일련의 S-expression 토큰에서 구문 분석 트리를 어떻게 구성합니까?

브라우저에서 Node.js 서버로 큰 파일을 보내려면 어떻게해야합니까?

PHP에서 2Gb보다 큰 파일을 다운로드하려면 어떻게해야합니까?

파일을 메모리에 미리로드하려면 어떻게해야합니까?

"XML 구문 분석 오류: 비공개 토큰(APT0000)"을 어떻게 수정합니까? (자마린.폼)

줄 번호와 ASCII 해석없이 파일에서 원시 바이너리 '비트'를 어떻게 덤프합니까?

메모리에 비해 너무 큰 중간 numpy 배열

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관