これまでは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に泣かされそうで怖い。
「テキストファイルの入出力」を行ってきたけど、
扱うのが数値とかだけの場合いちいちテキストにしてたら遅いし重い。
数値型の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に泣かされそうで怖い。