カテゴリ: Java 更新日: 2026/01/30

JavaのBufferedOutputStreamクラスのwriteメソッドを徹底解説!初心者でもわかるファイルへのバイナリ書き込み

BufferedOutputStreamのwriteメソッド
BufferedOutputStreamのwriteメソッド

教材紹介 Java学習のおすすめ教材

Javaの基礎を体系的に整理しながら学習したい方には、 資格対策としても定評のある定番教材が参考になります。

Javaプログラマ Silver SE 17 教科書をAmazonで見る

※ Amazon広告リンク

先生と生徒の会話形式で理解しよう

生徒

「Javaでファイルに文字を書き込むときって、どうすればいいんですか?」

先生

「文字やデータをファイルに書き込むときには、BufferedOutputStreamクラスのwriteメソッドを使うのが一般的ですよ。」

生徒

「なるほど。writeって、何か特別なことをしないと使えないんですか?」

先生

「それが意外と簡単なんです。ではこれから、BufferedOutputStreamwriteメソッドの使い方を基礎から一緒に見ていきましょう!」

1. BufferedOutputStreamクラスとは

1. BufferedOutputStreamクラスとは
1. BufferedOutputStreamクラスとは

BufferedOutputStreamクラスは、Javaでファイルなどの出力先に効率よくデータを書き込むためのクラスです。バッファリング機能があるため、書き込み処理を高速化できます。

このクラスは、OutputStreamを継承しており、FileOutputStreamなどの出力ストリームに対してラップして使うことが一般的です。バッファを通してデータを書き込むことで、1バイトずつ直接書き込むよりも処理効率が格段に良くなります。

2. writeメソッドとは?

2. writeメソッドとは?
2. writeメソッドとは?

writeメソッドは、バイトデータを出力ストリームに書き込むためのメソッドです。BufferedOutputStreamでは、writeメソッドを使って一時的にデータをバッファに保存し、後でまとめて出力先に書き出します。

このwriteメソッドには複数の使い方があります。

  • write(int b):1バイト(整数)を出力
  • write(byte[] b):バイト配列全体を出力
  • write(byte[] b, int off, int len):バイト配列の一部を出力

3. writeメソッドの基本的な使い方

3. writeメソッドの基本的な使い方
3. writeメソッドの基本的な使い方

それではBufferedOutputStreamを使って文字列をファイルに書き込む基本的な例を見てみましょう。


import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class WriteExample {
    public static void main(String[] args) {
        try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
            String data = "Javaでファイルに書き込みます。";
            bos.write(data.getBytes()); // 文字列をバイト配列にして書き込み
            bos.flush(); // バッファの内容をファイルへ書き出す
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

output.txt に「Javaでファイルに書き込みます。」という内容が保存される

この例では、文字列をgetBytes()でバイト配列に変換し、writeメソッドで書き込んでいます。その後、flushメソッドでバッファの中身を出力先に反映させています。

4. write(int b)の使い方と注意点

4. write(int b)の使い方と注意点
4. write(int b)の使い方と注意点

write(int b)は、1バイトのデータを出力します。int型ですが、実際に書き込まれるのは下位8ビットだけです。


bos.write(65); // 'A' のASCIIコード

このように、数値65'A'として書き込まれます。

5. write(byte[] b, int off, int len)の活用法

5. write(byte[] b, int off, int len)の活用法
5. write(byte[] b, int off, int len)の活用法

この形式のwriteメソッドでは、バイト配列のうち一部の範囲だけを出力することができます。


byte[] data = "サンプルデータ".getBytes();
bos.write(data, 3, 6); // 配列の4バイト目から6バイト分を書き出す

一部だけを書き込みたいときや、大きなデータを分割して処理したいときに便利です。

6. writeとflushをセットで使おう

6. writeとflushをセットで使おう
6. writeとflushをセットで使おう

BufferedOutputStreamは、データを一時的にバッファにためているため、writeを呼んだだけではファイルに書き込まれないことがあります。

確実にファイルへ反映させるには、writeの後にflushを呼ぶ必要があります。あるいは、ストリームをcloseすると、自動的にflushも実行されます。

7. BufferedOutputStreamとwriteでできること

7. BufferedOutputStreamとwriteでできること
7. BufferedOutputStreamとwriteでできること

BufferedOutputStreamwriteメソッドを組み合わせることで、Javaでは高速かつ安全にファイルやネットワークへのデータ出力が可能になります。

ログファイルの出力、バイナリデータの書き込み、大量データの高速処理など、さまざまな場面で活用できます。初心者のうちから使い方をしっかり理解しておけば、実践でも役立つ場面が多いでしょう。

まとめ

まとめ
まとめ

BufferedOutputStreamとwriteメソッドの重要ポイント振り返り

ここまで、JavaのBufferedOutputStreamクラスとwriteメソッドについて、基礎から実践的な使い方まで詳しく解説してきました。 Javaでファイルにデータを書き込む処理は、一見すると単純に見えますが、実際には処理効率や安全性を意識することがとても重要です。 その点で、BufferedOutputStreamは初心者から実務経験者まで幅広く使われている、非常に基本かつ重要なクラスだといえます。

BufferedOutputStreamは、内部にバッファを持ち、ある程度データがたまったタイミングでまとめて書き込む仕組みになっています。 これにより、ファイルや外部デバイスへのアクセス回数を減らすことができ、Javaプログラム全体のパフォーマンス向上につながります。 特に、ログ出力や大量データの保存、バイナリファイルの生成などでは、このバッファリングの効果が大きく現れます。

writeメソッドの使い分けを理解しよう

writeメソッドには複数のオーバーロードがあり、それぞれ用途が異なります。 write(int b)は一バイトずつ書き込むため、文字コードやバイナリデータの仕組みを理解する学習段階で役立ちます。 一方、write(byte[] b)write(byte[] b, int off, int len)は、実務での利用頻度が高く、文字列やデータの塊を効率よく書き込む際に欠かせません。

特に、バイト配列の一部だけを書き込めるwrite(byte[] b, int off, int len)は、大容量ファイルを分割して処理する場面や、 ネットワーク通信、ストリーム処理などでもよく使われます。 このような使い分けを理解しておくことで、Javaの入出力処理に対する理解が一段と深まります。

flushとcloseを意識した安全な書き込み

記事内でも何度か触れましたが、BufferedOutputStreamを使う際に特に重要なのがflushの存在です。 バッファにたまったデータは、writeを呼んだだけではすぐにファイルへ反映されない場合があります。 プログラムの途中で確実にデータを書き出したい場合には、flushを呼ぶ習慣を身につけましょう。

また、try-with-resources構文を使えば、処理終了時に自動的にcloseが呼ばれ、 その中でflushも実行されるため、初心者には特におすすめの書き方です。 例外処理とリソース管理を同時に学べる点でも、Javaの基礎力向上につながります。

まとめとしてのサンプルプログラム

最後に、これまでの内容を踏まえたシンプルなサンプルプログラムをもう一度確認しておきましょう。 基本的な流れを繰り返し見ることで、BufferedOutputStreamwriteメソッドの使い方が自然と身についてきます。


import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class SummarySample {
    public static void main(String[] args) {
        try (BufferedOutputStream bos =
                 new BufferedOutputStream(new FileOutputStream("summary.txt"))) {

            String message = "BufferedOutputStreamとwriteメソッドの復習です。";
            bos.write(message.getBytes());
            bos.flush();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

このように、ファイル出力の基本構造はとてもシンプルです。 しかし、その裏側ではバッファリングや例外処理など、Javaらしい堅牢な仕組みが動いています。 これらを理解した上でコードを書くことで、読みやすく保守しやすいプログラムが書けるようになります。

先生と生徒の振り返り会話

生徒

「BufferedOutputStreamって、ただのファイル書き込み用クラスだと思っていましたけど、 処理速度や安全性まで考えられているんですね。」

先生

「そうですね。Javaの入出力処理は、見た目以上に奥が深いです。 バッファリングの仕組みを理解するだけでも、プログラム全体の質が変わりますよ。」

生徒

「writeメソッドも、用途に応じて使い分ける意味がよく分かりました。 今までは何となく使っていたので、これからは意識して書けそうです。」

先生

「それが大切です。基本を丁寧に理解しておけば、応用も自然と身についてきます。 今回学んだ内容は、Javaのファイル操作全般で必ず役に立ちますよ。」

カテゴリの一覧へ
新着記事
JavaのBufferedInputStreamクラスの使い方を徹底解説!closeメソッドで安全にストリームを閉じよう
JavaのBufferedInputStreamクラスの使い方!availableメソッドで読み取り可能なバイト数を確認しよう
JavaのCookieバージョンを設定しよう!setVersionメソッドの使い方を初心者向けにやさしく解説
JavaのCookieをHTTPS専用にする!setSecureメソッドの使い方を初心者向けにやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.3
Java&Spring記事人気No3
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.4
Java&Spring記事人気No4
SpringのPageableとSortでページング一覧APIを最短実装!初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス
No.6
Java&Spring記事人気No6
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.7
Java&Spring記事人気No7
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.8
Java&Spring記事人気No8
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本

💻 作業効率アップに

長時間のコーディングでも疲れにくい♪ 静音ワイヤレスマウス

Logicool Signature M750 を見る

※ Amazon広告リンク