一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して14日目です。クリックしてイベントの詳細をご覧ください。
前回の記事では、 CharArrayReaderを紹介し、その基本的な概念と一般的に使用されるいくつかのメソッドについて説明しました。理解しやすいので、具体的な例は示していません。この記事では、Readerの別の実装クラスであるInputStreamReaderを引き続き紹介します。
概念的理解
InputStreamReaderを理解するために、最初に前に送信された画像を見てみましょう。
図からわかるように、InputStreamReaderもReaderクラスから継承されており、InputStreamReaderとFileReader/Fileにも一定の関係があります。
InputStreamReader自体の役割は、バイトストリームを文字ストリームに変換することです。
InputStreamReaderは、バイトストリームから文字ストリームへのブリッジとして機能し、バイトストリームを文字ストリーム出力に変換し、バイトストリームの文字セットを指定できます。
文字セットを指定した後、文字を1つずつ出力できます。文字セットのエンコードが指定されていない場合、プラットフォームのデフォルトの文字エンコードがデコードプロセス中に使用されます。
InputStreamReaderは、指定された文字セットを使用してバイトを読み取り、文字にデコードします。
使用する文字セットは(名前または明示的に)指定できますが、指定しない場合は、プラットフォームのデフォルトの文字セットが使用されます。
変換ストリームが有効になると、他の入力ストリームと連携して、他の入力ストリームのデータを文字単位のデータに変換する必要があります。
InputStreamReaderのread()メソッドを呼び出すたびに、構築パラメーターとして渡された入力ストリームから1バイト以上が読み取られます。
開発で効率的なバイトから文字への変換が必要な場合は、現在の読み取り操作を満たすために必要な数よりも多くのバイトを事前に着信ストリームから読み取ることができるため、文字のバイト配置の不整合によって引き起こされる問題を回避できます。
コンストラクタ
// 使用默认字符集创建一个InputStreamReader。
InputStreamReader(InputStream in)
// 使用给定字符集创建一个InputStreamReader 实例。
InputStreamReader(InputStream in, Charset cs)
// 使用给定字符集解码器创建InputStreamReader 实例。
InputStreamReader(InputStream in, CharsetDecoder dec)
// 同上,只不过字符集参数不一致。
InputStreamReader(InputStream in, String charsetName)
复制代码
一般的な方法
// 关闭流并释放资源。
void close()
// 返回字符编码名称
String getEncoding()
// 读取单个字符
int read()
// 根据参数,将字符读入,并置入数组中的某一部分
int read(char[] cbuf, int offset, int length)
复制代码
使用例
public static void transReadNoBuf() throws IOException {
// 读取文件的数据
InputStream inputStream = new FileInputStream("copy.txt");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);//读取
char[] charArray = new char[10];
int len = inputStreamReader.read(charArray);
System.out.println(new String(charArray,0,len));
inputStreamReader.close();
}
复制代码
例を見ると、比較的明確です。これはFileINputStream自体であり、InputStreamReaderを介して出力するために文字ストリームに変換します。
要約する
この記事は、InputStreamReaderの概念と使用法に関するものであり、Reader実装クラスの最後の共通クラスの紹介でもあります。以降の記事では、文字出力ストリームWriterの関連コンテンツを紹介します。