データベーステーブルにblob列があります。これをbyte[]
Javaプログラムでマッピングとして使用し、このデータを使用するには、InputStream
またはに変換する必要がありOutputStream
ます。しかし、私がそうするとき、私は内部で何が起こるかわかりません。この変換を行うと何が起こっているのか、誰かが簡単に説明できますか?
データベーステーブルにblob列があります。これをbyte[]
Javaプログラムでマッピングとして使用し、このデータを使用するには、InputStream
またはに変換する必要がありOutputStream
ます。しかし、私がそうするとき、私は内部で何が起こるかわかりません。この変換を行うと何が起こっているのか、誰かが簡単に説明できますか?
回答:
次のように、バイト配列I / Oストリームを作成して使用します。
byte[] source = ...;
ByteArrayInputStream bis = new ByteArrayInputStream(source);
// read bytes from bis ...
ByteArrayOutputStream bos = new ByteArrayOutputStream();
// write bytes to bos ...
byte[] sink = bos.toByteArray();
あなたは実装が標準というJDBCドライバを使用していると仮定すると、JDBC Blobインタフェースは、(すべてません)、あなたがすることができますまた、接続するInputStream
か、OutputStream
使用してブロブにgetBinaryStream
とsetBinaryStream
方法1を、そしてあなたも取得し、直接バイトに設定することができます。
(一般的に、あなたは閉じて、しかしすべての例外、およびcloseストリームを処理するための適切な措置を講じなければならないbis
し、bos
彼らは任意の外部リソースに関連付けられていないので、上記の例では、不要である;例えば、ファイルディスクリプタ、ソケット、データベース接続を。)
1- setBinaryStream
メソッドは実際にはゲッターです。図を行きます。
「使用」は読み取りを意味すると思いますが、読み取りの場合について説明する内容は、基本的に書き込みの場合と逆にすることができます。
したがって、最終的にはbyte []になります。これは、特殊なタイプの変換(文字、暗号化など)を必要とする可能性があるあらゆる種類のデータを表すことができます。このデータをそのままファイルに書き込みたいとしましょう。
最初に、基本的にバイトを順番に何かに供給するメカニズムであるByteArrayInputStreamを作成できます。
次に、作成するファイルのFileOutputStreamを作成できます。さまざまなデータソースと宛先に対応する多くのタイプのInputStreamsとOutputStreamsがあります。
最後に、InputStreamをOutputStreamに書き込みます。この場合、バイトの配列は書き込みのためにFileOutputStreamに順番に送信されます。このため、IOUtilsの使用をお勧めします
byte[] bytes = ...;//
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
FileOutputStream out = new FileOutputStream(new File(...));
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
そして逆に
FileInputStream in = new FileInputStream(new File(...));
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
byte[] bytes = out.toByteArray();
上記のコードスニペットを使用する場合は、例外を処理する必要があるため、finallyブロックで「閉じる」ことをお勧めします。
ByteArrayInputStreamを使用して、byte []配列を入力ストリームに変換できます
String str = "Welcome to awesome Java World";
byte[] content = str.getBytes();
int size = content.length;
InputStream is = null;
byte[] b = new byte[size];
is = new ByteArrayInputStream(content);
完全な例については、こちらを確認してくださいhttp://www.onlinecodegeek.com/2015/09/how-to-convert-byte-into-inputstream.html
私の答えがこの質問に遅れるのは確かですが、コミュニティはこの問題に対する新しいアプローチを望んでいると思います。
byte[] data = dbEntity.getBlobData();
response.getOutputStream().write();
応答オブジェクトに既存のOutputStreamが既にあるので、これはより良いと思います。新しいOutputStreamを作成する必要はありません。