- ベストアンサー
バイナリの読み込みから出力まで
- バイナリファイルの読み込みと特定の範囲の抜き出し、保存について質問します。
- 具体的には、hoge.mp3ファイルをバイナリで読み込み、1000バイト目から200バイトの範囲を抜き出し、short.mp3として保存する方法を知りたいです。
- 提供されたコードではコンパイルエラーが発生していますので、正しい方法を教えてほしいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
import java.io.*; class Main{ public static void main (String[] args) throws FileNotFoundException,IOException{ /* でかいファイル作るの面倒だから入出力のファイル名は変更させてもらう。 内容はUTF-8で"あいうえお"の5文字。BOMを含めず。 つまり16進数で E3 81 82 E3 81 84 E3 81 86 E3 81 88 E3 81 8A */ FileInputStream fis = new FileInputStream("test.txt"); /* ドキュメント読め。絶対そんな引数をとるように書かれていないはずだ。 http://download.oracle.com/javase/6/docs/api/java/io/FileInputStream.html#read%28byte[],%20int,%20int%29 これはエラーメッセージからもわかるはずだ。 手元にあるヒントを活用できないといつまで経っても絶対に自分で書けるようにはならない。 */ byte[] bytes = new byte[4]; /* 1バイト飛ばして*/ fis.skip(1); /* (飛ばしたから)2バイト目から4バイトを拾って、bytes[0]から、bytes[3]までの4つに格納する。*/ fis.read(bytes, 0 , 4); /* とりあえず早めに閉じとく。本来使うべき例外は使わないよ。面倒だから*/ fis.close(); DataOutputStream dout = new DataOutputStream(new FileOutputStream("short.bin")); dout.write(bytes); dout.close(); /* 結果(バイナリエディタで確認) 81 82 E3 81 */ } }
お礼
回答ありがとうございます。 問題解決できました。 たしかにそうでね・・・ 今度からもうちょっと試行錯誤してから質問します