我在数据库表中有一个blob列,在Java程序中必须使用byte[]
进行映射,使用该数据时必须将其转换为InputStream
或OutputStream
。但是,当我执行此转换时,内部会发生什么我不清楚。是否有人能简要解释一下这个转换的过程?
我在数据库表中有一个blob列,在Java程序中必须使用byte[]
进行映射,使用该数据时必须将其转换为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 Blob接口的JDBC驱动程序(并非所有驱动程序都是如此),你也可以使用getBinaryStream
和setBinaryStream
方法将InputStream
或OutputStream
连接到Blob中1,并且您还可以直接获取和设置字节。
(通常情况下,您应采取适当的步骤来处理任何异常并关闭流。但是,在上面的示例中关闭bis
和bos
是不必要的,因为它们未关联任何外部资源;例如文件描述符,套接字,数据库连接。)
1 - setBinaryStream
方法实际上是一个getter。想象一下。
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块中执行“关闭”操作。
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
InputStream/OutputStream与它们所处理的字节之间没有转换。它们是用于二进制数据的,只是按原样逐个读取(或写入)字节。
当你想从字节转换为字符时,需要进行转换。然后你需要使用字符集进行转换。这发生在从字节创建String或Reader时,它们是用于字符数据的。
output = new ByteArrayOutputStream();
...
input = new ByteArrayInputStream( output.toByteArray() )
byte[] data = dbEntity.getBlobData();
response.getOutputStream().write();
我认为这样更好,因为您已经在响应对象中有一个现有的OutputStream。 不需要创建新的OutputStream。
我知道我的回答对于这个问题来说已经晚了很多,但我认为社区会喜欢一种更新的解决方法。
String info = "somedata";
OutputStream os=new FileOutputStream("mydata.bin");
byte [] datas= info.getBytes();
os.write(datas);
InputStream is=new FileInputStream("mydata.bin");
datas=new byte[1000];
int counts = is.read(datas); //reads all data from bin to datas then returns size
info = new String(datas,0,counts); //
is.close();;
System.out.println("From Binary File: " + info);