ファイルからbyte []を書き込み、読み取ります
-
11-10-2019 - |
質問
ファイルからバイト[]を書き込み、ロードするためのシンプルなもの(できれば外部LIBはありません)を探しています。多かれ少なかれ[Python's Pickle] [1]のようなもの。
byte[] bytes = new byte[10];
ByteBuffer bbuf = new ByteBuffer.allocate(bytes.length);
bbuf.wrap(bytes); // edited due to Jon Skeet's answer
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();
問題は、そのようなファイルからオブジェクト構造を読み取れないということです。さらに、editorでは、ファイル「somebytes」にはカップルまたは0が含まれています。したがって、FileOutputStreamがコンテンツ( "T"またはバイト等価)のいずれかを入れているようには見えません。
解決
バイトバッファーをに割り当てました サイズ の bytes
, 、それはバイトバッファがバイト配列に関連付けられているという意味ではありません。バイト配列を使用してラップできます ByteBuffer.wrap
.
これがあなたのコードの最小限の変更です します 書きます t
ファイルに:
byte[] bytes = new byte[10];
ByteBuffer bbuf = ByteBuffer.wrap(bytes);
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();
実際のコードの場合、Try/最終的なブロックを使用して、例外に関係なくファイルが常に閉じられていることを確認する必要があることに注意してください。
ただし、これはシリアル化から長い道のりです。ジャワ します 独自のバイナリシリアル化があります - 参照してください ObjectOutputStream
と ObjectInputStream
. 。個人的には、クラスの変更に直面しても非常に脆くなる可能性があるため、通常はこの種のシリアル化を避けています。バイナリシリアル化にThriftまたはProtocolバッファーを使用したり、XML、JSON、またはその他の人間読み取り可能な形式にシリアル化するなど、シリアル化には他のさまざまなアプローチがあります。
他のヒント
あなたはできる
seek(position)
b = read(length)
その後、Bは長さのバイトの配列になります。
申し訳ありません - 読み直して、読んでいるのではなく、書くことを探しています。
同じもののよりシンプルなバージョンです。
byte[] bytes = new byte[10];
bytes[1] = 't';
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();
Web上のファイルからバイト[]の読み取り/書き方の方法については、多くの例があります。 Googleを試してみてください。