바이트 배열로 큰 파일을 읽고 arraylist에 추가하고 있습니다. 나쁜 ... 나는 메모리에 100MB 파일로 끝납니다. 나는 그들을 처리하고 라인별로 (또는 모든 x 라인 수만큼) 출력해야한다. 어떻게해야합니까? BufferedWriter는 ByteArrays를 사용하지 않습니다.즉석에서 큰 바이트 배열 쓰기 (메모리가 문제가되지 않도록)
답변
나는 모두 당신이 그들을 어떻게 처리하는지에 달려 있다고 생각합니다. 한 번에 하나의 파일을 처리 할 수 있습니다. 개별 파일이 너무 큰 경우 한 번에 100K를 읽고 줄 바꿈을 직접 구문 분석하십시오. 파일의 마지막 줄 바꿈까지 모든 것을 처리하고 나머지 부분을 배열의 시작 부분으로 옮기고 더 많은 데이터를 읽습니다. 이것들은 간단한 기술이지만 처리 방법에 대해 알지 못해서 내가 제안 할 수있는 전부입니다. 왜, 시도의 BufferedReader
당신이 자바 7 사용하는 경우를 사용하지 않는
nio2 http://download.oracle.com/javase/7/docs/api/java/nio/package-summary.html http://download.oracle.com/javase/7/docs/api/java/nio/file/ package-summary.html
죄송합니다. 해당 데이터베이스에서 보지 못했습니다. –
메모리 매핑 된 파일을 사용합니다. 이렇게하면 힙을 많이 사용하지 않고 "메모리 내"MB 또는 GB를 사용할 수 있습니다. (몇 KB).
외부 소스의 데이터 인 경우에도 직접 메모리 또는 메모리 매핑 된 파일에 배치 할 수 있습니다.
이진 파일 인 경우 줄 단위로 읽는 것에 대해 이야기하는 것이 적절하지 않습니다. 어쨌든 대용량 파일을 전체 메모리에 저장하지 않고 순차적으로 처리하려면 해당 파일을 스트리밍하는 것이 좋습니다. InputStream
및 OutputStream
유형을 살펴보십시오. 그리고 이름에 'ByteArray'가있는 모든 유형을 피하십시오.
이와 같이 "즉시"데이터를 처리하는 것은 스트리밍이라고합니다. 한 스트림에서 데이터가 도착하고 처리되며 다른 스트림에 저장되므로 모든 것을 메모리에 저장하지 않아도됩니다.
데이터베이스에서 직접 가져온 경우 ResultSet
은 모든 결과 행을 한 번에 가져 오지 않습니다. 루프를 통해 안전하게 반복하여 "즉시"행을 처리 할 수 있습니다.
파일 인 경우 스트림 (예 : FileInputStream
)으로 읽을 수 있으며 작은 청크를 미리 가져올 수 있습니다. 텍스트 파일 인 경우 줄 바꿈시 모든 자동 버퍼링 및 분할에 Reader
을 사용하십시오.
어디서나이 데이터를 가져 와서 "즉시"처리하고 출력물에 쓸 수 있습니다. 다시 말하지만, 바이트 배열에 쓰지 않고 스트리밍을 수행하십시오 (예 : FileOutputStream
또는 Writer
).
- 1. 클라이언트로의 큰 바이트 배열 전송
- 2. 읽기/쓰기 바이트 배열 안드로이드
- 3. GAE Blobstore에 바이트 배열 쓰기
- 4. Android - OutputStreamWriter에 바이트 배열 쓰기
- 5. 자바 바이트 배열 메모리가 해제되지 않았습니다.
- 6. 메모리가 변경되지 않도록 보호하기
- 7. 루비와 시리얼 배열에 바이트 배열 쓰기
- 8. 파일에서 바이트 배열 쓰기/읽기 Java
- 9. 동일한 프로세스에서 AppDomains간에 큰 바이트 배열 보내기
- 10. VB.Net 즉석에서 배열 초기화하기
- 11. UIWebView에서 메모리가 누출되지 않도록 보장
- 12. 파일에 바이트 배열
- 13. RandomAccessFile : 루프에 쓰기 (바이트) 또는 쓰기 (바이트 배열), 더 효과가 뭐야?
- 14. 바이트 배열
- 15. 바이트 [] 배열
- 16. 바이트 배열 앞에 바이트 추가
- 17. FileService에 큰 파일이있는 메모리가 부족합니다.
- 18. Python 파일에 바이트 쓰기
- 19. Ruby에서 소켓에 바이트 쓰기
- 20. 메모리가 디스크로 스왑되지 않도록 할 수 있습니까?
- 21. haskell 큰 문자열 쓰기
- 22. Java/Android : 소켓을 통해 바이트 배열 읽기/쓰기
- 23. .NET에서 바이트 배열 읽기 및 쓰기 Windows Forms
- 24. 바이트 배열 (SWT)에 이미지 생성/쓰기 속도 향상
- 25. 쓰기 배열
- 26. array_diff로 큰 배열 처리
- 27. 생성자 (Java)에서 즉석에서 배열 초기화
- 28. jsoncpp의 StyledWriter를 사용하여 한 줄에 큰 배열 쓰기
- 29. 바이트 배열에서 이중 배열
- 30. MYSQL에 바이트 배열 업로드
라인별로? 그래서 그 텍스트 파일입니까? 그런 다음 byte []로 읽지 말고 대신 Reader를 사용하십시오 (한 줄씩 읽음). – Thilo
이들은 데이터베이스의 바이트입니다. 불행히도 나는이 인스턴스에서 문자열에 캐스트 할 수 없습니다. –