私は読んだFileInputStream
ところ、ファイルのバイトデータを読み取る読み取りメソッドがあることがわかりました。
私が知りたいのは、それが読み取るバイトデータの種類は何ですか? ASCII、Unicode、またはその他のタイプを使用することを意味しますか?
私は読んだFileInputStream
ところ、ファイルのバイトデータを読み取る読み取りメソッドがあることがわかりました。
私が知りたいのは、それが読み取るバイトデータの種類は何ですか? ASCII、Unicode、またはその他のタイプを使用することを意味しますか?
ドキュメントから
FileInputStreamは、画像データなどの生のバイトのストリームを読み取るためのものです。文字のストリームを読み取るには、FileReaderの使用を検討してください。
ASCII、Unicode、...は、バイトではなく文字の場合に適用されます。それらは単なるバイト(8ビット)です。
public InputStreamReader(InputStream in, Charset cs)
文字セットを指定する場所で使用できます。
FileInputStream
バイナリ I/O クラスです。Unicode からファイル固有のエンコーディングへ、またはその逆への変換が必要なテキスト I/O ですが、バイナリ I/O は変換を必要としません。ファイルからバイトを読み取ると、元のバイトが返されます。
私が知りたいのは、それが読み取るバイトデータの種類は何ですか? ASCII、Unicode、またはその他のタイプを使用することを意味しますか?
およびそのメソッドに関する限りFileInputStream
、データの「タイプ」は 1 つだけです。そして、そのタイプは「一連のバイト(またはオクテット)」です。
その他の「タイプ」は、別のライブラリ (またはアプリケーション コード) レイヤーが処理するためのものです。
ASCIIおよびUnicodeと呼ばれる「タイプ」は、文字エンコーディングです(大まかに言えば)。(実際、Unicode はまったくエンコーディングではありません...そして、このコンテキストでは正確には意味がありません。Unicode のエンコーディングには、「UTF-8」や「UTF-16」などの名前があります。http:/を参照してください。 /en.wikipedia.org/wiki/Comparison_of_Unicode_encodings .)
いずれにせよ、テキスト ファイル タイプ (つまり、標準的な文字エンコーディング スキームでの文字列) を "処理" する標準的な方法は、Reader
クラスを使用することです。InputStreamReader
から文字データを読み取るために特別に設計されたと呼ばれるラッパー クラスがありInputStream
ます。
その他の非テキスト「タイプ」のデータは、 、 、 、イメージ リーダー クラスなどのクラスによって処理さZipInputStream
れInflaterInputStream
ますGZIPInputStream
。
ファイルのエンコーディングは変更されません。目的のエンコーディングで byte[] をデコードする場合は、charset
以下のように目的の文字セットに変換するために使用できます。
Charset cs = Charset.forName("UTF-8"); // breaks too
String convertedString= new String(byteArray, cs);