안녕하세요, 수고많으십니다.
대용량 파일(작게는 수십 메가 바이트, 크게는 수백 메가 바이트)에서
특정부분, 20480바이트부터 30720바이트까지를
FileInputStream 을 이용하여 byte로 읽은 후
다시 FileOutputStream 을 이용하여
다른 한 개의 파일로 저장하려고 합니다.
read(byte[] b, int off, int len) 메서드가 있어서
이를 이용하였습니다.
다음은 코딩한 부분입니다...
=================================================================
<상단생략>
File originalFile = new File(dirPath + filename);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(originalFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dirPath + filename2));
bufferedData = new byte[(int) originalFile.length()];
int readCount = 0;
if((readCount = bis.read(bufferedData)) != -1)
{
bos.write(bufferedData, startOffset, readCount);
}
bos.close();
bis.close();
<하단생략>
=================================================================
그런데 약간의 문제점이 발생을 하는군요!
파일의 크기가 작을때는 별 문제가 없으나
크기가 커지면 메모리 문제가 발생을 합니다.
맘에 드는 로직은 아니지만
위에서 bufferedData의 바이트배열 크기를
1024로 지정하고
while((readCount = bis.read(bufferedData)) != -1)
{
//어쩌고저쩌고...ㅠ.ㅠ
}
와 같이 반복문을 통해서 readCount을 계속 더해나가다가
시작 위치인 startOffset에 도달하면
그 때부터 bos.write을 하면 되긴 하겠죠.
근데 좋은 방법은 아닌것 같다는 생각이 듭니다.
어떻게 하면 대용량 파일의 특정 부분을 바이트배열로 가져와서
다른 파일로 저장을 할 수 있을까요?
고수 여러분들의 조언을 기다리겠습니다. |
|
|
| |