• ベストアンサー

for文を使わずバイナリファイルから目的のデータを読む方法

バイナリファイルを読み込んで、目的のデータまでfor文を使っているのですが、もっと効率良く目的のデータを読むことはできないのでしょうか? for (int a=0 ; a < 36 ; a++) { bytedata = (byte)fi.read(); } よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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"));

kemonoqoo
質問者

お礼

ご返送ありがとうございます。 いろいろ実験してみて納得のいくものが作れました。 ありがとうございます。

その他の回答 (3)

  • covachan
  • ベストアンサー率38% (46/120)
回答No.3

何度も申し訳ありません。訂正させてください。 >byte[] data = new byte[36]; >data = fi.read(data); byte[] data = new byte[36]; int ret = fi.read(data);

  • covachan
  • ベストアンサー率38% (46/120)
回答No.2

要件はバイナリファイルの先頭から36bytes読み込む。 ですよね? ならば、普通に byte[] data = new byte[36]; data = fi.read(data); でいいのではないですか?

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

fiというのはFileInputStreamでしょうか? それだったら、skip()メソッドが使えると思います。 使い方はJavaのドキュメントを見てください。 ちなみに、 InputStream系のクラスが使いにくければ、 RandomAccessFileの使用を考えてもいいかもしれません。

kemonoqoo
質問者

お礼

早々のお返事ありがとうございます。 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を用いるにはどのようにすればよいのでしょうか? よろしくお願いします。

関連するQ&A