关于java:Byte []到InputStream或OutputStream

您所在的位置:网站首页 byte转成inputstream 关于java:Byte []到InputStream或OutputStream

关于java:Byte []到InputStream或OutputStream

2024-06-23 05:54| 来源: 网络整理| 查看: 265

在我的数据库表中有一个BLUB列,我必须在我的Java程序中使用EDCOX1 0作为映射,使用这个数据,我必须把它转换成EDCOX1,1,或EDOCX1,2。但我不知道当我这样做时内部会发生什么。有人能简单地解释一下我做这个转换时发生了什么吗?

相关讨论 标题不应该是"字节数组…"或"字节数组…"或"字节[……"或"字节数组字节…"的instaed? 请参见此处的相反内容:stackoverflow.com/questions/1264709/…

创建和使用字节数组I/O流,如下所示:

1234567byte[] 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方法1将InputStream或OutputStream连接到blob,还可以直接获取和设置字节。

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

1-setBinaryStream方法确实是一种getter。算了吧。

我假设你的意思是"使用"意味着读,但是我要解释的读的情况基本上可以逆转为写的情况。

所以最后得到一个字节[]。这可以表示可能需要特殊类型转换(字符、加密等)的任何类型的数据。让我们假设您希望将此数据按原样写入文件。

首先,您可以创建一个bytearrayinputstream,它基本上是一种按顺序向某个对象提供字节的机制。

然后可以为要创建的文件创建一个fileoutputstream。对于不同的数据源和目标,有许多类型的输入流和输出流。

最后,将输入流写入输出流。在这种情况下,字节数组将按顺序发送到fileoutputstream进行写入。为此,我建议使用ioutils

123456byte[] bytes = ...;// ByteArrayInputStream in = new ByteArrayInputStream(bytes); FileOutputStream out = new FileOutputStream(new File(...)); IOUtils.copy(in, out); IOUtils.closeQuietly(in); IOUtils.closeQuietly(out);

反过来

123456FileInputStream in = new FileInputStream(new File(...)); ByteArrayOutputStream out = new ByteArrayOutputStream(); IOUtils.copy(in, out); IOUtils.closeQuietly(in); IOUtils.closeQuietly(out); byte[] bytes = out.toByteArray();

如果使用上述代码段,您将需要处理异常,我建议您在finally块中执行"close"。

相关讨论 您的意思是-bytearrayOutputstream out=new bytearrayOutputstream();而不是bytearrayOutputstream out=new bytearrayOutputstream(); 是的,哎呀…… 很可能是在最后一句中。 读最后一行

我们可以使用bytearrayinputstream将byte[]数组转换为输入流

123456String 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和它们使用的字节之间没有转换。它们是为二进制数据而设计的,只是按原样逐个读取(或写入)字节。

当您想从字节转换为字符时,需要进行转换。然后需要使用字符集进行转换。当您从字节(为字符数据创建的字节)创建字符串或读卡器时,就会发生这种情况。

123output = new ByteArrayOutputStream(); ... input = new ByteArrayInputStream( output.toByteArray() ) 12byte[] data = dbEntity.getBlobData(); response.getOutputStream().write();

我认为这更好,因为响应对象中已经有了一个现有的输出流。无需创建新的输出流。

我确实意识到我的答案对于这个问题来说太晚了,但是我认为社区希望有一种新的方法来解决这个问题。

相关讨论 圆形缓冲区不能解决操作问题。在编写的问题中,op需要一个单字节数组中的整个内容。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3