2011-09-30 3 views
5

FileOutputStreamをFileInputStreamに変換する最も簡単な方法は何ですか(コードは素晴らしいでしょう)?FileOutputStream into FileInputStream

+4

あなたはここで何を求めているのか理解していますか? 「変換する」とは何を意味しますか?彼らは基本的に反対のものです。 1つは読書用であり、もう1つは書込み用です。 'FileOutputStream'で書いているファイルを読み込もうとしていますか? –

+1

正確に何をしたいですか? FileOutputStreamはファイルに書き込みを行い、FileInputStreamはファイルから読み込みます。私は、前者が後者にどのように変換できるのか見当たりません。 –

+0

私はFileOutputStreamを受け取ります。私が欲しいのはそれを読むことです。 – Pen

答えて

14

これはあなたを助けるかもしれない:

http://ostermiller.org/convert_java_outputstream_inputstream.html

この記事では、3つの可能性に言及している:

  • は再び
  • 使用パイプ
  • それを読んでバイト配列に完全な出力を書き込みます循環バイトバッファ(そのページでホストされているライブラリの一部)を使用してください。
  • それを他の方法でラウンド(出力への入力)を行うだけで、参照のための210


、:

は、Apache CommonsのIOとの簡単な解決策は次のようになります。

IOUtils.copyLarge(InputStream, OutputStream) 

またはちょうどあなたの場合ファイルをコピーしたい:

FileUtils.copyFile(inFile,outFile); 

Apache Commons IOを使用したくない場合は、あなたが与えられた@Thomas例を使用できる場合

public static long copyLarge(InputStream input, OutputStream output) throws IOException 
{ 
    byte[] buffer = new byte[4096]; 
    long count = 0L; 
    int n = 0; 
    while (-1 != (n = input.read(buffer))) { 
    output.write(buffer, 0, n); 
    count += n; 
    } 
    return count; 
} 
+1

リンクは壊れていますが、ここでも元の回答を見つけることができます: https://web.archive.org/web /20110929161214/http://ostermiller.org/convert_java_outputstream_inputstream.html – GregT

1

、そうでない場合はあなたが行うことができます:copyLarge法Tませ

として:java2s.com

EDITから

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 

public class FileInputOutputExample { 
    public static void main(String[] args) throws Exception { 

    InputStream is = new FileInputStream("in.txt"); 
    OutputStream os = new FileOutputStream("out.txt"); 
    int c; 
    while ((c = is.read()) != -1) { 
     System.out.print((char) c); 
     os.write(c); 
    } 
    is.close(); 
    os.close(); 

    } 
} 

例@トーマスは彼の答えを削除しました、私はこれを処理するためのリファレンスコモンズIOアプローチを追加するだけです:

IOUtils.copy(InputStream is, OutputStream os) 
+0

「FileOutputStream」を「FileInputStream」に変換する方法がわかりません。 –

+0

実際に私の例は他の方法(入力から出力へ)であったので、私はそれを削除しました。それでも関連性がある場合は、参照のために元に戻すことができます。 – Thomas

+0

@マーク:それは本当です、私は彼が他の人に1つを読ませたいと思ったと思います – Kris

2

書き込み後(ディスクへのフラッシュなし)の内容を読み込めるようにするには、ByteArrayOutputStreamとByteArrayInputStreamを使用します。 ByteArrayOutputStreamへの書き込みが終了すると、基礎となるバイトデータを取得し、ByteArrayInputStreamを使用してそれを読み戻すことができます。

ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
// do any output onto outStream you need 
ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray()); 
// you can read back the output with inStream now 

バッファー(プロデューサー/コンシューマータイプの問題)が必要な場合は、javaのnioパッケージに付属のバッファーを調べてください。

4

私はFileOutputStreamを受け取ります。私が欲しいのはそれを読むことです。

あなたは確かにOutputStreamから読むことができません。私はあなたが書いているファイルからFileOutputStreamによって読むことを意味していると思います。私はあなたがそれを行うこともできるとは思わない。 FileOutputStreamは、書き込まれるファイルへの参照を保持していないようです。あなたがする必要がどのような

Fileまたはパス(String)はFileOutputStreamに渡されたものを発見し、新しいFileInputStreamを作成するために、その同じFileまたはStringを使用しています。

+3

私は彼がFileDescriptorを得るためにFileOutputStream.getFD()を使うことができたと思います。その周囲にFileInputStreamを構築するよりも。あなたが同じFileDescriptorから同時に読み書きできるかどうかは分かりません。 –

+0

@ S.L.Barth:良い点、私は実際にそれを見ていましたが、 'FileInputStream'は' FileDescriptor'を取るコンストラクタを持っているという事実を見逃しました。 –

関連する問題