响应式网站开发教程pdf,社交网站开发项目计划报告,wordpress无缝截图,ui设计app界面模板您是否坚持使用编码#xff0c;因为您有字节数组#xff0c;并且链中的下一个方法需要InputStream#xff1f; 不用担心Java有解决方案#xff0c;您可以使用 ByteArrayInputStream 在Java中将字节数组转换为InputStream 。 此类使用字节数组作为源#xff0c;并且由于它… 您是否坚持使用编码因为您有字节数组并且链中的下一个方法需要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传递它。 如果要将字节转换为字符并在完成后关闭流请不要忘记提供字符编码。 翻译自: https://www.javacodegeeks.com/2014/04/how-to-convert-byte-array-to-inputstream-and-outputstream-in-java.html