- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストファイルの先頭から文字を1文字ずつ取得し、)
テキストファイルの文字コード、バイト数、ファイルポインタを取得する方法
このQ&Aのポイント
- テキストファイルの先頭から文字を1文字ずつ取得し、文字コード、バイト数、ファイルポインタを取得する方法について解説します。
- テキストファイルのエンコーディング方式はShift_JIS、EUC-JP、UTF-8、UTF-16LEに限定されます。
- エンコーディング方式の特定には外部リソースへの問い合わせが必要ですが、InputStreamReaderクラスやRandomAccessFileクラスを組み合わせることで目的を達成できます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「読み込み元のバイト数が取得出来ず」とありますが、 InputStreamReaderのread()で読んだ1文字の値をcとすると、 char[] temp = new char[1]; temp[0] = (char)c; String s = new String(temp, encoding); // new String(temp) でいいのかな?? int n = s.getBytes(encoding).length; としてnが読み込んだバイト数に等しくなるかと思います。あまりきれいではありませんが。 似たようなことをCharsetクラスやCharsetEncoderクラスのencode()でもできるかもしれません。 これを積算すればファイルポインタが今何処を指しているかわかるので、 InputStreamReaderを継承したクラスを作って、 read()をオーバーライドして位置を積算するようにして、 現在の位置を返すメソッドを追加すればよいかと思います。 ついでに空白などをスキップすることもできるでしょう。 試したわけではないので、アイディアだけの紹介でした。
お礼
回答ありがとうございます。 String#getBytes()メソッドの存在を知らなかった為、まさしく福音の回答でした。 ちょっと荒組してみましたが、きちんと指定したエンコード方式でのバイト数が取得できています。 このアイディアを頂き、実装に取り掛かってみようと思います。 ありがとうございました!