2

URLからzipファイルを読み取っています。Javaと休止状態を使用して物理的に保存せずに、データベースに直接保存したいと考えています。

私はzipファイルを次のように読んでいます、

    URLConnection  uCon = null;
    URL Url;
    byte[] buf;     
    ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream("mytest.zip"));
    Url= new URL(http://xyz.com/pages/info.doc);
    uCon = Url.openConnection();
    is = uCon.getInputStream();
    buf = new byte[size];
    is = uCon.getInputStream();
    outStream.putNextEntry(new ZipEntry("info.doc"));
    while ((ByteRead = is.read(buf)) != -1) 
              {     
    outStream.write(buf, 0, ByteRead);
    ByteWritten += ByteRead;
    }
    is.close();
    outStream.close();

「mytest.zip」を作成したら物理的に保存したくありません。DB に直接保存したいですか? 出来ますか ?それはどのように行うことができますか?

前もって感謝します。

4

2 に答える 2

2

はい、可能です。ByteArrayOutputStreamaに書き込む代わりにaに書き込みFileOutputStreamます。getBytes()のメソッドを使用してByteArrayOutputStream、zip ファイルのバイトを含むメモリ内のバイト配列を取得します。

あらゆる種類のデータをデータベース テーブルに挿入する場合と同様に、準備済みステートメントを作成し、そのsetBinaryStream()orsetBlob()メソッドを使用して、列の 1 つにバイト配列の内容を入力します。ByteArrayInputStreamこれらのメソッドの 1 つに (バイト配列を引数として作成された)を渡すだけです。

于 2012-06-30T17:34:42.687 に答える
2

パイプを使用してメモリの必要性を低く抑えます - setBlob(colunm, InputStream) - を使用し、IOUtils.copy を使用して高速コピーを行います。

    PipedOutputStream pipeOut = new PipedOutputStream();
    PipedInputStream pipeIn = new PipedInputStream(pipeOut);

    setBlob(pipeIn);

    ZipOutputStream zipOut = new ZipOutputStream(pipeOut, Charset.forName("UTF-8"));
    zipOut.putNextEntry(new ZipEntry("info.doc"));
    IOUtils.copy(sourceIn, zipOut); // org.apache.commons.io.IOUtils;
    zipOut.closeEntry();
    zipOut.close();

これにはまだtrys がなく、2 番目のスレッドがあればよいでしょう。

于 2012-06-30T19:13:29.023 に答える