ビデオファイルをRPiホットスポットから私の電話機のディレクトリにWiFi経由で転送しようとしています。ストレージにフォルダを作成し、RPiサーバーに接続してデータを受信できました。ただし、書き込まれた後に表示されるファイルが正しくありません。実際に、私がそれを開こうとすると、私の電話で別の無関係なアプリが開かれるだけです。非常に奇妙な!ここAndroid FileOutputStreamが失敗すると思われる
は、問題のコードである:
try {
BufferedInputStream myBis = new BufferedInputStream(mySocket.getInputStream());
DataInputStream myDis = new DataInputStream(myBis);
byte[] videoBuffer = new byte[4096*2];
int i = 0;
while (mySocket.getInputStream().read(videoBuffer) != -1) {
Log.d(debugStr, "while loop");
videoBuffer[videoBuffer.length-1-i] = myDis.readByte();
Log.d(debugStr, Arrays.toString(videoBuffer));
i++;
}
Log.d(debugStr, "done with while loop");
// create a File object for the parent directory
File testDirectory = new File(Environment.getExternalStorageDirectory()+File.separator, "recordFolder");
Log.d(debugStr, "path made?");
if(!testDirectory.exists()){
testDirectory.mkdirs();
}
Log.d(debugStr, "directory made");
// create a File object for the output file
File outputFile = new File(testDirectory.getPath(), "recording1");
Log.d(debugStr, "outputfile made");
// now attach the OutputStream to the file object, i
FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
Log.d(debugStr, "write to file object made");
fileOutputStream.write(videoBuffer);
Log.d(debugStr, "video written");
fileOutputStream.close();
Log.d(debugStr, "done");
} catch (IOException e1) {
e1.printStackTrace();
}
ビデオ.h264フォーマットで最初であり、バイト配列として送信されています。ファイルのサイズは10MBです。私のwhileループでは、配列の値を文字列として出力し、多くのデータを出力します。すべてのデータが送信されていると思うほどのデータ。そのフォルダに移動するとき、私が与えた名前のファイル "recording1"がありますが、それはわずか8KBです。
何が起こっているかについてのアイデアはありますか?どんな助けでも大歓迎です!
を。 – Andreas
なぜ 'InputStream'をバッファしますが、' OutputStream'をバッファしませんか?ソケットの 'InputStream'がバッファリングされているかどうかにかかわらず、バッファサイズよりも少ないデータを返すことがあるならば、それは別の方法です。 – Andreas
@アンドレアスあなた自身の答えを投稿することを禁じてはいけません。実際の問題に対処するべきであり、そのような副題ではありません。 – EJP