问题

我的数据库表中有一个blob列,我必须在我的Java程序中使用byte[]作为映射,并使用这些数据我必须将其转换为InputStreamorOutputStream。但是当我这样做时,我不知道内部会发生什么。任何人都能简单地向我解释一下当我进行这种转换时会发生什么吗?


#1 热门回答(179 赞)

你可以创建和使用字节数组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 interface的JDBC驱动程序(并非所有操作),你可以使用getBinaryStreamsetBinaryStreammethods1将aInputStreamOutputStream连接到blob,你也可以直接获取和设置字节。

(通常,你应该采取适当的步骤来处理任何异常,并关闭流。但是,上面的示例中的closingbisbos是不必要的,因为它们不与任何外部资源相关联;例如文件描述符,套接字,数据库连接。)

1 - ThesetBinaryStream方法真的是一个吸气剂。去搞清楚。


#2 热门回答(12 赞)

我假设你的意思是'使用'意味着读取,但我会解释的读取案例基本上可以反转写案例。

所以你最终得到一个byte []。这可能代表任何类型的数据,可能需要特殊类型的转换(字符,加密等)。让我们假装你想把这些数据写成文件。

首先你可以创建一个ByteArrayInputStream,它基本上是一个按字节顺序提供字节的机制。

然后你可以为你想要创建的文件创建一个883999415。对于不同的数据源和目的地,有许多类型的InputStream和OutputStream。

最后,你将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块中执行'closing'。


#3 热门回答(5 赞)

我们可以使用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


原文链接