ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?