200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 如何在Java中将字节数组转换为InputStream和OutputStream

如何在Java中将字节数组转换为InputStream和OutputStream

时间:2019-06-12 13:10:16

相关推荐

如何在Java中将字节数组转换为InputStream和OutputStream

您是否坚持使用编码,因为您有字节数组,并且链中的下一个方法需要InputStream? 不用担心Java有解决方案,您可以使用

ByteArrayInputStream在Java中将字节数组转换为InputStream。 此类使用字节数组作为源,并且由于它是InputStream的子类,因此您可以轻松地将其传递给任何接受InputStream作为参数的方法。 尽管大多数API(例如JDBC和File API)都允许您直接从InputStream读取,因为这允许您使用有限的堆空间来处理任意内容。 您应该利用此优势,直接从InputStream读取而不是获取字节数组,然后将它们转换回InputStream。 仅适用于您拥有旧代码而不再维护和更新的情况。 同样,将字节数组转换为OutputStream也很简单。 由于我们使用OutputStream编写某些内容,因此您可以直接在其中写入字节数组。 假设您从TCP套接字收到了一些消息并希望保留在文件系统中,则可以使用OutputStream和FileOutputStream直接写入字节数组。 前面我们已经看到了如何将InputStream转换为字节数组 ,在本文中,通过创建一个将字节数组转换为InputStream的简单示例,我们将看到相反的结果。

这是我们的示例程序,该程序首先从String中获取字节数组以进行测试。 无论如何,在将String转换为字节时总是提供字符编码 ,反之亦然。 为了重新创建场景,我创建了一个静态方法,该方法将InputStream转换为String。 此方法称为streamToString(),该方法采用InputStream和字符编码来读取文本。 我们重新创建相同的String,之前已将其转换为字节数组。 本示例的下一部分显示如何将字节数组写入OutputStream。 顺便说一句,如果您不使用try-with-resource语句 ,那么不要忘记在完成Streams后立即关闭它。 可以说,接受InputStream的方法是否应该关闭它,但出于安全考虑,我已经关闭了它。 让我知道您对此有何想法,因为Apache Commons IO和Google Guava中都有IO实用程序类的示例,它们关闭流,但不关闭传递给它们的流。

import java.io.BufferedReader;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.nio.charset.Charset;import java.nio.charset.StandardCharsets;/*** Java Program to convert byte array to InputStream and OutputStream in Java.* Uses ByteArrayInputStream and ByteArrayOutputStream examples.* @author Javin Paul*/public class ByteArrayToStream {public static void main(String args[]) {String str = "Google is GOD";byte[] bytes = str.getBytes(StandardCharsets.UTF_8);

// Creating InputStream from byte array// ByteArrayInputStream is sub-class of InputStreamInputStream is = new ByteArrayInputStream(bytes);String stringFromBytes = streamToString(is, StandardCharsets.UTF_8);System.out.println("String recreated from bytes : " + str);

// Writing byte array to OutputStreamOutputStream os = new ByteArrayOutputStream();try {os.write(bytes);os.close();} catch (IOException e) {e.printStackTrace();}}/** Read String from InputStream and closes it*/public static String streamToString(InputStream is, Charset encoding) {BufferedReader br = new BufferedReader(new InputStreamReader(is, encoding));StringBuilder sb = new StringBuilder(1024);try {String line = br.readLine();while (line != null) {sb.append(line);line = br.readLine();}} catch (IOException io) {System.out.println("Failed to read from Stream");io.printStackTrace();} finally {try {br.close();} catch (IOException ioex) {System.out.println("Failed to close Streams");ioex.printStackTrace();}}return sb.toString();}}Output:String recreated from bytes : Google is GOD

您可以看到我们的streamToString()方法如何将InputStream转换为String ,但是在此之前,我们已经使用ByteArrayInputStream在Java中将字节数组转换为InputStream了。 正如我所说的,ByteArrayInputStream是InputStream的子类,您可以在需要InputStream时通过或使用它。 从java.io包中获得的类层次结构图也很清楚,该图显示了JDK库中InputStream的不同实现。

这就是如何在Java中将字节数组转换为InputStream的全部内容。 由于对java.io软件包的了解有限,一开始听起来可能很困难,但是一旦您知道有一个名为ByteArrayInputStream的类,它就变得非常简单。 由于它是InputStream的子类,因此可以代替InputStream传递它。 如果要将字节转换为字符并在完成后关闭流,请不要忘记提供字符编码。

翻译自: //04/how-to-convert-byte-array-to-inputstream-and-outputstream-in-java.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。