ソフトウェア開発したい日記

「面白い!」と思った頭の体操や、数学の問題を載せていきます
その他ロードバイクででかけた先の写真や、ソフト開発のメモ等

バイト入出力ストリームを使いたい

2010年08月29日 19時20分02秒 | ソフト開発日記
これまではJavaの入門書とかに書いてある
「テキストファイルの入出力」を行ってきたけど、
扱うのが数値とかだけの場合いちいちテキストにしてたら遅いし重い。

数値型のdatファイルとか使って節約してヘブン状態になりたい。
ということでちょっと勉強メモ。

既存のバイナリデータのdatファイルの読み込みはこんな感じでできました。

try {
  DataInputStream dis = new DataInputStream(new FileInputStream(FILE_NAME));
  n = dis.readShort();
  System.out.println(""+n);
  dis.close();
} catch (IOException ex) {
  ex.printStackTrace();
}

(FILE_NAMEはString型のファイルの場所を示す変数。)
同様にして、書き込みは次のやり方でできるはず。

try {
  DataOutputStream dos = new DataOutputStream(new FileOutputStream(FILE_NAME, true));

  for (int i = 0; i <SIZE; i++) {   }
  dos.close();
} catch (IOException ex) {
  ex.printStackTrace();
}

for文で繰り返しながら上書きさせるため、
FileOutputStreamのコンストラクタの第2引数をtrueにしてます。

できた。けどたまにおかしな挙動を示す。何でだろう。
あと、データサイズがちょっとおかしい。
Javaのデータ型はちょっと特殊なのかな?

同様の処理でC言語で作製したバイナリファイルは、計算通りピッタリ800KBなのに対し
Javaで作製したファイルは801KBとなった。
パリティビット的な何かが入ってるのかな?
1KB。小さいかもしれないけど後々この1KBに泣かされそうで怖い。