2011-04-26 7 views
0

가능한 중복 :
Object attributes to same-length representation for faster reading변환 객체가 항상 같은 길이의 문자열에 속성

나는 각 개체의 표현은 같은 길이 파일로 내 개체를 작성하려는

, 그래서 전체 파일을 읽지 않고도 파일 섹션으로 건너 뛸 수 있습니다.

파일을 많은 VM에서 읽을 수 있으며 크기가 TB 일 때 필요합니다. 이 일을하는 가장 좋은 방법은 무엇입니까? 이를 달성하기 위해 int 배열에 넣어 보았지만이 단계는 불필요한 것으로 보입니다. 나는 한 번에 하나씩 다른 객체를 쓰면서 각 객체를 하나씩 전달하고있다. 건배

// Convert Person attributes to integers and put in an array 
int[] person = new int[8]; 
person[0] = age; 
if (gender.equals("m")) {person[1] = 1;} 
else {person[1] = 0;} 
person[2] = children; 
person[3] = goodHealth? 1:0; 
person[4] = cars; 
person[5] = avgWeekShopping; 
person[6] = salary; 
person[7] = smoker? 1:0; 

return person; 
+0

코드 샘플을 게시 하시겠습니까? – Rom1

+0

당신은 임의의 물건을 쓰고 있습니까? 아니면 클래스 계층 구조의 인스턴스가 모두 다릅니 까? 또한, 그것들을 모두 하나의 파일에 쓰는 목적은 무엇입니까? 다른 VM이 파일을 읽는다는 것은 무엇을 의미합니까? –

+0

그들은 모두 같은 클래스의 인스턴스입니다. 하나의 매우 큰 가상 인구 데이터 집합을 쿼리하는 전자 사회 과학 시스템을 시뮬레이션하고 있습니다. 작업자 VM이 하나의 파일에서 할당 된 청크를 읽길 원합니다. I/O 병목 현상이 있음을 알고 있습니다. 나는 지금 약간의 코드를 게시 할 것이다. 감사합니다 – bashcrufter

답변

1

값을 바이트 배열에 쓰는 것이 더 빠릅니다. 이것은 모든 출력 스트림에 직접 기록 될 수 있습니다. 그리고 흡연자 플래그를 1 바이트로 인코딩하는 것과 같은 공간을 절약 할 수 있습니다.

빈을 가져와 byte[]을 반환하는 정적 메서드와 byte[]을 가져 와서 새 빈을 만드는 정적 메서드가 필요합니다. 모든 배열은 크기가 동일하므로 별도의 인덱스 파일없이 개별 데이터 세트의 오프셋을 쉽게 계산할 수 있습니다.

관련 문제