JavaのDataOutputStreamについて
DataOutputStreamとは
DataOutputStreamはJavaのjava.io
パッケージに属するクラスで、基本データ型(int、float、doubleなど)や文字列をバイトストリームとして書き込むために使用されます。主にデータを効率的かつプラットフォーム非依存な形式で保存したり、通信で送信したりする際に役立ちます。
DataOutputStreamを使う理由
通常のOutputStream
ではバイト単位でデータを扱いますが、DataOutputStream
を使うと、数値や文字列などの高レベルなデータ型を簡単に扱えます。また、データの書き込み形式がプラットフォームに依存しないため、異なる環境間でデータを共有する際に便利です。
DataOutputStreamの使い方
DataOutputStreamを使用するには、以下の手順を踏みます:
- 出力先を指定して
OutputStream
を作成します(例:FileOutputStream
)。 DataOutputStream
にラップします。writeInt
やwriteUTF
などのメソッドを使用してデータを書き込みます。- 作業が終わったら
close
メソッドでストリームを閉じます。
よく使われるメソッド
writeInt(int v)
: 整数を4バイトで書き込む。writeFloat(float v)
: 浮動小数点数を4バイトで書き込む。writeDouble(double v)
: 倍精度浮動小数点数を8バイトで書き込む。writeUTF(String str)
: UTF形式で文字列を書き込む。writeBoolean(boolean v)
: ブール値を書き込む。writeLong(long v)
: 長整数を8バイトで書き込む。
使用例
整数と文字列を書き込む例
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataOutputStreamExample {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("output.dat");
DataOutputStream dos = new DataOutputStream(fos)) {
// 整数の書き込み
dos.writeInt(42);
// 浮動小数点数の書き込み
dos.writeFloat(3.14f);
// 文字列の書き込み
dos.writeUTF("Hello, World!");
System.out.println("データが正常に書き込まれました。");
} catch (IOException e) {
e.printStackTrace();
}
}
}
データの読み取り
書き込んだデータをDataInputStream
を使って読み取る例を示します。
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class DataInputStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("output.dat");
DataInputStream dis = new DataInputStream(fis)) {
// データの読み取り
int intValue = dis.readInt();
float floatValue = dis.readFloat();
String stringValue = dis.readUTF();
// 読み取ったデータの表示
System.out.println("整数: " + intValue);
System.out.println("浮動小数点数: " + floatValue);
System.out.println("文字列: " + stringValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
複数データ型を書き込む例
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class MultiTypeExample {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("multi.dat");
DataOutputStream dos = new DataOutputStream(fos)) {
dos.writeBoolean(true);
dos.writeChar('A');
dos.writeLong(123456789L);
System.out.println("複数のデータ型が書き込まれました。");
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意点
- 書き込む順序と読み取る順序が一致している必要があります。順序が異なると正しくデータを復元できません。
- ストリームを閉じないとデータが完全に書き込まれない場合があります。必ず
close
メソッドを呼び出すか、try-with-resources構文を使用してください。 - バイナリ形式でデータが保存されるため、人間が直接ファイルを読み取るのは困難です。
DataOutputStreamは効率的かつ正確なデータ保存を可能にする強力なツールです。適切に使用することで、さまざまなアプリケーションで活用できます。