JavaでOutputStreamをWriterに変換する方法を解説
JavaにおけるOutputStreamクラスはバイト指向のストリームであるのに対し、Writerクラスは文字指向のストリームです。この2つを相互に扱うためには、OutputStreamWriterクラスを使用します。具体的には、ByteArrayOutputStreamオブジェクトをOutputStreamWriterのコンストラクタに引数として渡すことで、OutputStreamをWriterとして操作できるようになります。
OutputStreamWriterは、文字ストリームからバイトストリームへの橋渡し(ブリッジ)の役割を担うクラスです。このライターに書き込まれた文字は、指定された文字セット(charset)に基づいてバイト列へエンコードされます。文字セットを明示的に指定しない場合は、実行環境のデフォルト文字セットが使用されます。
構文
public class OutputStreamWriter extends Writer
OutputStreamWriterはWriterクラスを継承しているため、write()メソッドやclose()メソッドなど、Writer共通のAPIをそのまま利用できます。
コード例
import java.io.*;
public class OutputStreamToWriterTest {
public static void main(String[] args) throws Exception {
String str = "TUTORIALSPOINT";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(baos);
for (int i = 0; i < str.length(); i++) {
osw.write((int) str.charAt(i));
}
osw.close();
byte[] b = baos.toByteArray();
for (int j = 0; j < b.length; j++) {
System.out.println(b[j]);
}
}
}
処理の流れ
- ByteArrayOutputStream:メモリ上にデータを蓄積するバイト出力ストリームを生成します。
- OutputStreamWriter:ByteArrayOutputStreamをラップし、文字単位での書き込みを可能にします。
- write():文字を1つずつ書き込み、内部で指定の文字セットによりバイトへエンコードされます。
- toByteArray():close()後、バッファに蓄積された内容をbyte配列として取得します。
実行結果
84 85 84 79 82 73 65 76 83 80 79 73 78 84
出力された数値は、各文字に対応するASCIIコード(バイト値)です。たとえば「T」は84、「U」は85を表しており、"TUTORIALSPOINT"という14文字がそれぞれ1バイトずつ正しくエンコードされていることが確認できます。このようにOutputStreamWriterを使うことで、バイト指向のストリームと文字指向のストリームをシームレスに連携させることが可能になります。
-
Javaのラッパークラスでプリミティブ型を変換する方法とディレクトリ操作の基本
本記事では、Javaのラッパークラスの基本的な使い方と、java.nioパッケージのFilesクラスを利用したディレクトリの作成・一覧表示・フィルタリングの方法について、サンプルコード付きで解説します。 ラッパークラスとは Javaには、java.langパッケージに「ラッパークラス」と呼ばれるクラス群が用意されています。これらのクラスのオブジェクトは、intやcharなどのプリミティブ型(基本データ型)の値を内部に包み込む(ラップする)役割を果たします。 ラッパークラスを利用することで、ArrayListやHashMapといったコレクションにプリミティブ型の値を格納できるようになります。また
-
JavaのMapをJSONに変換する3つの方法(Jackson・Gson・org.json)
JavaのMap(マップ)をJSONに変換する方法はいくつかあります。Javaでは、配列やMapとJSONの相互変換を行う場面が非常に多く、Web APIとのデータ連携などでも欠かせない処理です。 この記事では、代表的なライブラリであるJackson、Gson、org.jsonを使用して、JavaのMapをJSONに変換する3つの具体例をサンプルコード付きで解説します。 Jacksonを使ってJavaのMapをJSONに変換する 最初の例では、Jackson Core と Jackson Databind を使ってJavaのMapをJSONに変換します。 Jacksonライブラリを使用するには