2013-05-01 5 views
0

NetCDF 용 Java API를 사용하여 documentation에 따라 ASCII 문자 만 포함 된 CHAR 유형의 배열이있는 HDF5 파일이 있습니다. " char 타입은 바이트 단위로 하나의 문자를 해석 할 수없는 문자를 포함하며 일반적으로 7 비트 ASCII 문자를 포함합니다. " HDFView에서 배열의 thee 값 중 하나의 예제는 "13"입니다.Java를 사용하여 HDF5 파일의 NetCDF char 배열 변수 검색

int[] data = (int[]) netCDFArray.get1DJavaArray(int.class); 

하지만 어떻게 내가 다시이 CHAR 유형의 배열을받을 수 있나요 :

나는 정수의 배열이 같은 자바 배열로 그들 모두를 얻을 수 있다는 것을 알고? 불행히도 내가 참조한 문서는 도움이되지 않습니다.

일부 항목은 단일 문자보다 더 때문에 다음은, 정확하지 않을 수 있습니다

char[] data = (char[]) netCDFArray.get1DJavaArray(char.class); 

다음 시도는 모두 던져 ForbiddenConversionException : 나는 netCDFArray.toString()를 사용하는 경우

char[] data = (char[]) netCDFArray.get1DJavaArray(char.class); 
char[][] data = (char[][]) netCDFArray.get1DJavaArray(char[].class); 
String[] data = (String[]) netCDFArray.get1DJavaArray(String.class); 

내가보고 내 ArrayCharStringIterator을 사용하므로 문자열 배열. 나도 그런 반복자를 사용하여 각 문자열로 무언가를 할 수 있다고 생각합니다. 그러나 정수 검색을 위해 int 반복자를 사용할 필요가 없습니다. 내가 어떻게 정수를 검색 할 수있는 것과 비슷하게 CHAR 타입의 모든 문자열을 한 번에 효율적으로 검색 할 수 있습니까 (위 참조)? Java Strings[], CharSequence[] 또는 char[][]을 검색하면 만족할 것입니다.

답변

0

유형 CHAR의 NetCDF 문자열은 논리적으로 유형이 char 인 2 차원 배열로 표시되지만 내부적으로 유형이 char 인 단일 배열로 저장됩니다. 따라서, 데이터를 검색하기위한 가장 효과적인 방법은 다음

char[] data = (char[]) netCDFArray.get1DJavaArray(char.class); 

한 후 이러한 단일 어레이에서 개개의 문자열 추출해야

assert netCDFArray.getRank()==2 : "Expected a two-dimensional logical array of chars."; 
int stringLength=netCDFArray.getShape()[1]; 
int stringCount=netCDFArray.getShape()[0]; 
//iterate through stringCount positions of stringLength length 

추가 된 트위스트 명백하게 문자열로 저장되어있다가 zero-terminated 즉, 고정 길이 문자열은 ASCII 0을 구분 기호로 사용하여 stringLength보다 작은 가변 길이 문자열 일 수 있습니다. 코드에서 이것을 파생 시켰습니다. documentation에서 찾을 수 없습니다.

관련 문제