OutputStream转InputStream

OutputStream转InputStream如果本文对您有所帮助,可以点一下赞????本文只是学习笔记,欢迎指错,转载标明出处1、OutputStream转InputStream这是一个不合常理的想法1.1OutputStream和InputStream均是抽象类,它们内部并有保存数据的变量,转换并没有有意义,定义如下,publicabstractclassInputStreamimplementsCloseable{//…}publicabstractclassOutputStream

如果本文对您有所帮助,可以点一下赞👍

本文只是学习笔记,欢迎指错,转载标明出处

 

1、OutputStream转InputStream这是一个不合常理的想法

1.1、OutputStream和InputStream均是抽象类,它们内部并有保存数据的变量,转换并没有有意义,定义如下,

public abstract class InputStream implements Closeable {
    //...
}


public abstract class OutputStream implements Closeable, Flushable {
    //...
}

1.2、OutStream和InputStream的作用不同

一个OutputStream是用来写的,
一个IntputStream是用来读的。

假设一个是用来写”abc.txt”,一个是用来读”abc.txt”,这两的概念不同。

 2、为什么有人想要OutputStream转InputStream

2.1有个场景如下,后端需要生成一个文件,而开发者又不想在本地缓存(磁盘io效率低),所以在生成文件的时候,会得到一个OutputStream的流(OutStream便于输出文件),开发者这时候有需要将新生成的文件上传到文件服务器(一般文件服务提供的sdk需要的参数就是IntputStream,因为IntputStream便于读取需要上传的文件)。现在的情况就是生成的是OutStream类,但是上传的却是IntputStream,部分的开发者就会想“OutputStream如何转InputStream”这个问题。

2.2真正的解决方法是使用缓存数组和java继承思想

ByteArrayOutputStream是OutputStream的一个实现类,在生成文件的时候它可以代替OutputStream的位置,并且它里面会有个byte buf[],里面才是存储文件实际数据的变量

//定义如下
public class ByteArrayOutputStream extends OutputStream {

    protected byte buf[];

    //...
}

同理ByteArrayIntputStream是IntputStream的一个实现类,在生成文件的时候它可以代替IntputStream的位置。ByteArrayOutputStream转换ByteArrayIntputStream,其实就是转换里面byte数组

byte[] buffer =byteArrayOutputStream.toByteArray();
InputStream sbs = new ByteArrayInputStream(buffer);

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35149.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注