プロが教えるわが家の防犯対策術!

こんばんは、バイナリの扱いについて質問させてください。

やりたいことはこんな感じです。
(1) hoge.mp3ファイルをバイナリで読み込む。
(2) バイナリの1000バイト目から200バイトの範囲を抜き出す。
(3) 抜き出したバイナリをファイルshort.mp3として保存する。
下の構文だとそもそもコンパイルすら通らないのですが、
やりたいことを少しでも伝えたいので、あえて書かせていただきました。
どうかよろしくお願い致します。

FileInputStream fis = new FileInputStream("hoge.mp3");
// hoge.mp3の1000バイト目から200バイト分抜き出す。
byte[] pick = fis.read(fis, 1000, 200);
DataOutputStream dout = new DataOutputStream(new FileOutputStream("short.mp3"));
dout.write(pick);

A 回答 (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/jav …[],%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
*/
}
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
問題解決できました。
たしかにそうでね・・・
今度からもうちょっと試行錯誤してから質問します

お礼日時:2011/05/16 13:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!