ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
OutputStream とは
OutputStream は ストリームAPI におけるバイト出力ストリームの抽象基底クラスです。InputStream の対になるクラスで、ファイル / ネットワーク / メモリ など、どこに書くかに関わらず「バイトの並びを書き込む」インターフェースを共通化します。
抽象クラスなので直接インスタンス化はできず、用途に応じた具象クラス(FileOutputStream / ByteArrayOutputStream / BufferedOutputStream / PrintStream など)を使います。
主な具象クラス
| クラス | 用途 |
|---|---|
FileOutputStream | ファイルにバイトを書き込む |
BufferedOutputStream | 内部バッファでまとめ書き → 性能改善 |
ByteArrayOutputStream | メモリ上の byte[] に書き込む(テスト・一時バッファ) |
DataOutputStream | プリミティブ型(int, double, UTF 文字列)をバイナリで書く |
ObjectOutputStream | オブジェクトをシリアライズして書く |
PrintStream | System.out でおなじみ。print/println で書く |
FilterOutputStream | 他の OutputStream をラップするデコレータ基底 |
主なメソッド
| メソッド | 説明 |
|---|---|
write(int b) | 1 バイト書き込む(下位 8 ビットだけ使用) |
write(byte[] b) | 配列全体を書き込む |
write(byte[] b, int off, int len) | 配列の指定範囲を書き込む |
flush() | バッファに残ったデータを実際に書き出す |
close() | ストリームを閉じる(自動で flush) |
使用例 1: ファイルに書き込む
import java.io.FileOutputStream;
import java.io.IOException;
public class Sample {
public static void main(String[] args) {
// try-with-resources で自動 close
try (FileOutputStream fos = new FileOutputStream("out.txt")) {
String text = "Hello, OutputStream!\n";
fos.write(text.getBytes("UTF-8"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用例 2: BufferedOutputStream でラップ
1 バイトずつ write(int) を呼ぶと毎回ディスク I/O が発生して遅くなります。BufferedOutputStream で囲むと内部バッファ(既定 8192 バイト)に溜め、満杯になったタイミングでまとめて書き出されるため、桁違いに速くなります。
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedSample {
public static void main(String[] args) {
try (BufferedOutputStream bos =
new BufferedOutputStream(new FileOutputStream("big.bin"))) {
for (int i = 0; i < 1_000_000; i++) {
bos.write(i & 0xFF);
}
// close() 時に自動 flush されるが、明示的に呼びたい場合は:
// bos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用例 3: 追記モード
FileOutputStream の 2 番目の引数 append を true にすると、既存ファイルの末尾に追記されます(既定は false = 上書き)。
try (FileOutputStream fos = new FileOutputStream("log.txt", true)) {
fos.write("追記行\n".getBytes("UTF-8"));
}
使用例 4: OutputStreamWriter でテキスト書き込み
OutputStream は本来バイト用ですが、OutputStreamWriter を被せると String をエンコーディング指定で書けます。さらに BufferedWriter で囲むのが定番です。
import java.io.*;
import java.nio.charset.StandardCharsets;
try (BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("memo.txt"),
StandardCharsets.UTF_8))) {
bw.write("こんにちは");
bw.newLine();
bw.write("OutputStream の世界");
}
InputStream / Writer 系との関係
| 方向 / 単位 | バイト系 | 文字系 |
|---|---|---|
| 入力 | InputStream 系 | Reader 系 |
| 出力 | OutputStream 系 | Writer 系 |
画像・音声・ZIP などのバイナリは OutputStream、ログ・JSON・CSV などのテキストは Writer 系を選ぶのが基本方針です。
flush() と close() の使い分け
| メソッド | 役割 |
|---|---|
flush() | バッファに溜まったデータを実体に押し出す。ストリームは開いたまま |
close() | flush してからストリームを閉じる。OS リソース(ファイルディスクリプタ)を解放 |
長時間動くサーバが「途中まで書いたログがファイルに見えない」場合、たいてい flush 忘れです。try-with-resources を使えば close 時に自動 flush されるので、原則それで足ります。
よくあるエラーと対処
| 症状 | 原因 / 対処 |
|---|---|
FileNotFoundException: ... (アクセスが拒否されました) | 書き込み権限なし / 同名ファイルが他プロセスで開かれている |
| 文字化け | getBytes() の引数 / OutputStreamWriter の文字コード未指定。StandardCharsets.UTF_8 を明示 |
| 書き込み内容が途中までしか出ない | flush / close 忘れ。try-with-resources を使う |
| 巨大ファイルで OOM | byte[] = readAllBytes() 等で全量メモリに載せている。チャンク単位で write(buf, 0, n) ループに置き換える |
関連
- ストリームAPI — 親カテゴリ
- InputStream — 入力側の対概念
- ファイル入出力 — ファイル操作の文脈
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- InputStream
- OutputStream
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?