2016-07-21 11 views
1

ファイルを読み込もうとしています(拡張子は関係ありません)。後で書きますが、出力ファイルは入力ファイルとは異なります。あなたは私に言わせればバイトに変換し、このフォームからの書き込みなぜ、ファイルを読み書きするときに出力が変更されます

OutputStream outputStream = null; 
FileReader fr = new FileReader("rute\\inputfile.PNG"); 
BufferedReader br = new BufferedReader(fr); 
String line; 
while ((line= br.readLine()) != null) { 
    content += line; 
} 

byte[] toBytes= content.getBytes(); 
InputStream inputStream = new ByteArrayInputStream(toBytes); 
try { 
    outputStream = new FileOutputStream(new File("rute\\output.PNG")); 
    int read = 0; 
    byte[] bytes = new byte[1024]; 

    while ((read = inputStream.read(bytes)) != -1) { 
     outputStream.write(bytes, 0, read); 
    } 
    outputStream.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
inputStream.close(); 

私はデータで何かを行う必要があるためである、と私は、この変換を必要とする:

私のコードは次のです。あなたは、私が文字列にイメージをロード傾けることを教えている場合 は、はい、私はそのような何か行うことができます。

File fil = ~~~~; 
FileInputStream fis = null; 
fis = new FileInputStream(fil); 
byte[] bytess = IOUtils.toByteArray(fis); 

をしかし、私は、私は大きなファイルをロードしたい場合ので、この方法でそれを行うたくない、ヒープサイズこれは十分ではありません。これは、「1行の行」の読み取りによって解決できます。あなたの答え

+0

どのような質問ですか? –

+0

ファイルを変更せずにファイルを読み書きする方法、または出力ファイルが入力ファイルと同じでない問題/理由を教えてください。 –

答えて

2

ため

おかげで私は前にthis question読んでお勧めします。バイナリデータをStringに読み込むので、そのデータのエンコーディングが変更されます。したがって、出力は異なります。

ベスト・アプローチは、バイナリ・ファイルをバイト配列として読み込みます。しかし、私はどのタイプの変換/編集/変更をそれらと関連付ける必要があるかに依存します。

UPDATE

そして、もちろん、あなたはとてもあなたの出力ファイルは常に異なるものになります

while ((line= br.readLine()) != null) { 
    content += line + "\n"; 
} 

を書き込む前に、あなたのコンテンツを編集しています。

質問/問題が大きなバイナリファイルを読み取る方法であるのでUPDATE、googleは通常、あなたの友達です。 またはこれを確認できますquestion

+0

しかし、私はバイト配列として読み取る場合、私は配列内のファイル全体をロードする必要がありますか? 元のファイルを分割してヒープを過充電することはできないため、1行に1行ずつ処理しています –

+1

@AlejandroPicosPrietoバイナリファイルのコンテキスト内の "行"とは何ですか? – glglgl

+0

@AlejandroPicosPrietoなぜブロックで読み込む必要がありますか?常にhttps://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html#read(byte [])またはhttps://docs.oracle.com/javase/8を使用できます。 /docs/api/java/io/InputStream.html#read(byte[],%20int,%20int)。 – glglgl

関連する問題