JavaScriptを使用してフライトシミュレータからグリブデータを読み込むための小さなライブラリを作成しようとしています。JavaのテキストへのGRIBファイル
バイナリファイルを読み込んで文字列に変換するコードを作成しました。
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 **が得られます。ありがとうございました! –