2016-10-01 17 views
3

ファイルに書き込もうとします。ソケットから受け取ったデータを配列に格納しますが、書き込むとファイルが大きくなります。 .. データストリームの長さがわからないので、大きな配列を使用していると考えられます...write()メソッドを使用するとファイルが大きくなりすぎます

しかし、メソッドをチェックすると、write(byte [] b)指定されたバイト配列からこのファイル出力ストリームへのb.lengthバイト write()メソッドは配列の長さを読み取りますが、長さは2000 ... 書き込まれるデータの長さはどのように知ることができますか?

... 
byte[] Rbuffer = new byte[2000]; 
dis = new DataInputStream(socket.getInputStream()); 
dis.read(Rbuffer); 
writeSDCard.writeToSDFile(Rbuffer); 

... 

void writeToSDFile(byte[] inputMsg){ 



    File root = android.os.Environment.getExternalStorageDirectory(); 
    File dir = new File (root.getAbsolutePath() + "/download"); 

    if (!(dir.exists())) { 
     dir.mkdirs(); 
    } 

    Log.d("WriteSDCard", "Start writing"); 

    File file = new File(dir, "myData.txt"); 

    try { 
     FileOutputStream f = new FileOutputStream(file, true); 
     f.write(inputMsg); 
     f.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     Log.i(TAG, "******* File not found. Did you" + 
       " add a WRITE_EXTERNAL_STORAGE permission to the manifest?"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+2

ファイル全体を一度に読み取るのではなく、ダウンロードして書き込むことができます。次に、どのようにするかは関係ありません。 InputStreamからビットを読み込み、一度に512バイトから8 KBまでOutputStreamにコピーします。 –

+0

@ peter-lawreyどうすればストリームを失うことなく、ほんの少しのビットを読むことができますか?別のストリームが来ると(平均して...) –

+0

'read'メソッドのためにdocを読んでください。それは便利なことになる戻り値を持っている – njzk2

答えて

2

read()は、読み取られたバイト数、つまり-1を返します。可能であれば、の両方を無視して、バッファをいっぱいにします。結果を変数に格納し、-1をチェックし、それ以外の場合はwrite()メソッドに渡すだけです。

実際にあなたの方法に入力ストリームを渡し、ファイルを作成した後にループを使用する必要があります。

int count; 
byte[] buffer = new byte[8192]; 
while ((count = in.read(buffer)) > 0) 
{ 
    out.write(buffer, 0, count); 
} 

新しい入力ストリームをパケットごとに作成されることになりました-削除コメントであなたの文ではありません正しい。

+0

それを書き込みメソッドに渡すために、私はすべての入力ストリームをファイルに挿入したいので、挿入してオフセット(私は0になると思う)を挿入する必要があります...しかし、いくつかのメッセージの後に私は負の長さを受け取った、それは何を意味するのですか?(終了は終了ですか?) –

+0

はい。私は-1と言いました。あなたはJavadocに相談することを考えましたか? – EJP

+0

ちょうど実現した、ファイルが記憶容量のためにあまりにも大きくない、ファイルがあるべきであるより大きいです。予想されるファイルのサイズを考えると、2048バイトのバッファを試すことがあります。 +1 –

関連する問題