ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
InputStream とは
InputStream は java.io パッケージに含まれる抽象クラスで、バイト単位の入力ストリームを表します。ファイル・ネットワーク・メモリ上のバイト列・標準入力(System.in)など、入力の供給元を抽象化した共通のインタフェースであり、Java の I/O はこのクラスを起点に組み立てます。
「テキスト(文字)」ではなく「バイト」を扱う点が 文字列API 側の Reader と対になります。CSV や JSON のような文字データを読みたい場合は InputStreamReader でラップして文字コードを与えるのが正しい使い方です。
主要メソッド
| シグネチャ | 戻り値 | 説明 |
|---|---|---|
int read() | 0–255 / -1 | 1 バイト読み込む。EOF で -1 |
int read(byte[] b) | 読み込んだバイト数 / -1 | 配列にまとめて読む |
int read(byte[] b, int off, int len) | 読み込んだバイト数 / -1 | オフセット指定で読む |
byte[] readAllBytes() | byte[] | 残りすべてを一括読み込み(Java 9+) |
long skip(long n) | 実際にスキップしたバイト数 | n バイト読み飛ばす |
int available() | 残りの推定バイト数 | ブロックせずに読み出せるバイト数の目安(保証ではない) |
void close() | — | ストリームを閉じる。try-with-resources が自動で呼ぶ |
FileInputStream でファイルを読む
もっとも基本的な実装クラスは FileInputStream です。ファイルを 1 バイトずつ読む例。
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Sample {
public static void main(String[] args) throws IOException {
try (InputStream in = new FileInputStream("input.bin")) {
int b;
while ((b = in.read()) != -1) {
System.out.printf("%02X ", b);
}
}
}
}
read() は int を返しますが、有効値は 0–255 です。-1 はEOF(ストリーム末尾)を意味します。
バッファ付きで高速化:BufferedInputStream
1 バイトずつの read() はシステムコールが多発して遅くなります。BufferedInputStream でラップすると内部バッファ(既定 8KB)にまとめて読み込むため、I/O 回数が激減します。
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
try (InputStream in = new BufferedInputStream(new FileInputStream("big.bin"))) {
byte[] buf = new byte[4096];
int n;
while ((n = in.read(buf)) != -1) {
// buf[0..n) を処理
}
}
文字列として読みたいときは InputStreamReader
バイトを文字にするには、文字コードを明示して InputStreamReader でブリッジします。BufferedReader と組み合わせると 1 行ずつ読めます。
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
try (InputStream in = new FileInputStream("data.txt");
BufferedReader br = new BufferedReader(
new InputStreamReader(in, StandardCharsets.UTF_8))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
文字コードを省略するとプラットフォーム既定(Windows なら Shift_JIS など)になり文字化けの温床になるので、必ず StandardCharsets.UTF_8 を渡してください。
主な実装クラス
| クラス | 供給源 | 用途 |
|---|---|---|
FileInputStream | ファイル | ローカルファイルからバイトを読む |
ByteArrayInputStream | byte[] | メモリ上のバイト配列を InputStream として扱う |
BufferedInputStream | 他の InputStream | バッファリングして高速化 |
DataInputStream | 他の InputStream | プリミティブ型(int / long / UTF-8 文字列)を読む |
ObjectInputStream | 他の InputStream | シリアライズされたオブジェクトを復元 |
GZIPInputStream | 他の InputStream | GZIP 圧縮されたデータを展開しながら読む |
System.in | 標準入力 | コンソールからの入力 |
NIO の Files.newInputStream との使い分け
Java 7 以降は Files.newInputStream(Path) も使えます。FileInputStream よりも例外メッセージが分かりやすく、ストリームAPI と相性が良いため、新規コードはこちらが推奨です。
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
try (InputStream in = Files.newInputStream(Path.of("data.bin"))) {
byte[] all = in.readAllBytes(); // Java 9+
System.out.println("read = " + all.length + " bytes");
}
よくあるミスと対処
| 症状 | 原因 / 対処 |
|---|---|
FileNotFoundException | パス間違い / カレントディレクトリ違い。Path.toAbsolutePath() でログ出力して確認 |
大量の read() で激遅 | BufferedInputStream でラップする / read(byte[]) でまとめ読みする |
| 文字化け | バイトを直接 String 化していないか確認。InputStreamReader に UTF_8 を渡す |
available() の値で配列を確保したのに尻切れ | available() はあくまで「ブロックせず読める数の目安」。残量取得用ではない。readAllBytes() か ByteArrayOutputStream へ詰め直す |
close() 忘れでファイル数上限エラー | 必ず try-with-resources を使う |
関連
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
コメントを削除してもよろしいでしょうか?