- ベストアンサー
for文を使わずバイナリファイルから目的のデータを読む方法
バイナリファイルを読み込んで、目的のデータまでfor文を使っているのですが、もっと効率良く目的のデータを読むことはできないのでしょうか? for (int a=0 ; a < 36 ; a++) { bytedata = (byte)fi.read(); } よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
これでどうですか? FileInputStream fi = new FileInputStream("a.dat"); fi.skip(4*35); // int のバイト数(4) * 読み飛ばす要素数 int data = fi.read(); System.out.print(Integer.toHexString(data)); * オマケ BufferedInputStream を使って以下のようにファイルを開いた方が速くなるかも知れません。(これ以上の読み書きをする場合は特に)。 BufferedInputStream fi = new BufferedInputStream(new FileInputStream("a.dat"));
その他の回答 (3)
- covachan
- ベストアンサー率38% (46/120)
何度も申し訳ありません。訂正させてください。 >byte[] data = new byte[36]; >data = fi.read(data); byte[] data = new byte[36]; int ret = fi.read(data);
- covachan
- ベストアンサー率38% (46/120)
要件はバイナリファイルの先頭から36bytes読み込む。 ですよね? ならば、普通に byte[] data = new byte[36]; data = fi.read(data); でいいのではないですか?
- liar_adan
- ベストアンサー率48% (730/1515)
fiというのはFileInputStreamでしょうか? それだったら、skip()メソッドが使えると思います。 使い方はJavaのドキュメントを見てください。 ちなみに、 InputStream系のクラスが使いにくければ、 RandomAccessFileの使用を考えてもいいかもしれません。
お礼
早々のお返事ありがとうございます。 skip()メソッドを調べたのですが、使い方がいまいちよくわかりませでした。 ------------------------------------------------- int data; //ファイルをオープンする FileInputStream fi = new FileInputStream("a.dat"); //36バイト目まで読み込む for (int a=0;a<36;a++) { data = fi.read(); } //36バイト目を表示する System.out.print(Integer.toHexString(data)); ------------------------------------------------- この場合forを使わずにskipを用いるにはどのようにすればよいのでしょうか? よろしくお願いします。
お礼
ご返送ありがとうございます。 いろいろ実験してみて納得のいくものが作れました。 ありがとうございます。