Java를 사용하여 비행 시뮬레이터에서 grib 데이터를 읽는 작은 라이브러리를 만들려고합니다.GRIB 파일에서 Java 텍스트
이진 파일을 읽고이를 문자열로 변환하는 코드가 작성되었습니다.
public class MainClass
{
final static String FILE_NAME = "PATH\\global_winds.grib";
public static void main(String... aArgs) throws IOException
{
MainClass binary = new MainClass();
byte[] bytes = binary.readFile(FILE_NAME);
String myString = asciiBytesToString(bytes);
System.out.println(myString);
}
byte[] readFile(String aFileName) throws IOException
{
Path path = Paths.get(aFileName);
return Files.readAllBytes(path);
}
public static String asciiBytesToString(byte[] bytes)
{
if ((bytes == null) || (bytes.length == 0))
{
return "";
}
char[] result = new char[bytes.length];
for (int i = 0; i < bytes.length; i++)
{
result[i] = (char)bytes[i];
}
return new String(result);
}
}
파일을 읽고 횡설수설합니다. 누가 그립 형식에 익숙한가요? 내가 ASCII를 사용하는 줄 알았는데 ...
NetCDF와 같은 타사 라이브러리에 대해 알고 있습니다. 처리하려고하는 grib 파일에는 제한된 데이터가 포함되어 있으며이 파일을 읽는 작은 API를 만들고 싶었습니다.
감사합니다.
당신의 asciiBytesToString 메소드는 훨씬 더 간단하게 할 수 있습니다 :'new String (bytes, "US-ASCII")' –
GRIB의 "B"는 "Binary"의 약자로, ASCII가 아닙니다. 무엇인가가 ASCII인지 확인하는 것은 매우 간단합니다 : 좋아하는 텍스트 편집기에서 파일을 열고 읽을 수 있는지 확인하십시오. 이렇게하면 코드와 질문에 소비 한 시간을 피할 수있었습니다. GRIB에 관한 Wikipedia 기사를 읽으십시오. "참조"섹션에는 파일 형식의 정의가있는 PDF에 대한 링크가 있습니다. https://en.wikipedia.org/wiki/GRIB –
어윈, 훌륭한 자료에 감사드립니다. 내가 찾은이 파일도 있습니다 : https://www.wmo.int/pages/prog/www/WMOCodes/Guides/GRIB/GRIB2_062006.pdf. 하나의 질문. 섹션 0 (표시기) 디코딩부터 시작했습니다. 이것은 내가 얻는 것입니다 ('System.out.println (bytes [i]);') : ** GRIB; 규율 : 0; 버전 : 2; 옥텟 단위의 GRIB 메시지 길이 : 000000 -79 51 **. 이해가 안되는데 왜 여기서 음수를 얻습니까? 또한 월과 일에 대해 올바른 값 (** 10 4 **)을 얻었지만 Year의 경우 : ** 7 -32 **. 고맙습니다! –