공간 데이터를 테이블에서 파일로 쓰려고합니다. 하지만 디스크에 기록하기 전에 디스크의 정확한 데이터 크기를 알아야합니다.ObjectOutputStream을 사용할 때 디스크의 파일 크기를 추정합니다.
이size= 4B {for gid, int} + fullname.getBytes.length() {string} + 4B {d.shape.length, int} + d.shape.length
하지만 사실, 이것은 매우입니다 : 예를 들어, 이제 나는 다음과 같은 코드를 사용하여 디스크에 쓰고 있다고 가정 해 봅시다 :에
FileOutputStream fos = new FileOutputStream("t.tmp",false);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(gid);
oos.writeUTF(fullname);
oos.writeInt(d.shape.length);
oos.write(d.shape);
oos.close();
fos.close();
내가 디스크에 해당 파일의 크기를 생각은 같다 디스크의 실제 파일 크기와 다릅니다.
ObjectOutputstream을 사용하여 빈 파일을 생성하더라도 디스크에 4B 공간이 생깁니다.
디스크의 파일 크기를 계산하는 방법에 대한 도움이 필요하십니까?
(I 디스크에 데이터를 기록하고 실제 크기를 읽을 수 없습니다.이 성능을 낮출 것이다. 대신, 메모리에 저장된 데이터 값을 기준으로 디스크에있는 데이터의 크기를 계산해야합니다.)
를
* Object * OutputStream이 실제로 필요합니까? 'writeObject()'를 사용합니까? 또는 예제 코드가 세련된 것입니까? [DataOutputStream] (http://docs.oracle.com/javase/6/docs/api/java/io/DataOutputStream.html)을 사용하는 것이 더 나을 것 같습니다. ObjectOutputStream는 스트림 헤더 정보를 기록하고 이미 작성된 객체에 대한 참조를 추적하므로 참조를 작성하기 만하면되므로 크기를 사전 계산하는 데 방해가 될 수 있습니다.) –
또한 - 바이트를 쓴 후에 파일 시스템을 사용하여 인식하는 성능 문제를 확장 할 수 있습니까? 성능 문제와 관련하여 –
입니다. 나는 내 테이블에 40GB의 데이터를 가지고 있으며 그 중 대다수는 공간 데이터입니다. 나는 각 파일에 저장된 데이터의 전체 크기가 특정 값 (max_file_size)보다 작도록 테이블을 분할하고있다. 첫 번째 라운드에서는 테이블의 각 행에 대한 디스크의 크기를 계산하고 다음 라운드에서는 총 파일 크기가 max_file_size보다 작은 파일 내에 들어갈 수있는 많은 파일을 합계합니다. 따라서 모든 파일을 쓰고 디스크의 실제 파일 크기를 측정하는 것은 옵션이 아닙니다. – reza