大聪明xd 2020-11-03 17:10 采纳率: 0%
浏览 54

MapperUtils.INSTANCE.map 映射流对象

通过这个方法映射 流对象 映射过后的流 无法操作 一直报错流关闭 有大佬知道怎么回事吗 我同事用socket也遇到了同样的wen't

public static void change() throws IOException {
       Class1 class1 = new Class1();
       class1.setInputStream(new FileInputStream(new File("e://a.txt")));

       Class2  class2= MapperUtils.INSTANCE.map(Class2.class,class1);

        InputStream inputStream=class2.getInputStream();
        byte[] buffer=new byte[1024];
        int len=0;
        ByteArrayOutputStream bos=new ByteArrayOutputStream();
        while((len=inputStream.read(buffer))!=-1){
            bos.write(buffer,0,len);
        }


    }
        ![图片说明](https://img-ask.csdn.net/upload/202011/03/1604394569_67404.png)

  • 写回答

1条回答 默认 最新

  • 小小鱼儿小小林 优质创作者: 编程框架技术领域 2023-05-30 11:46
    关注

    可以使用try-with-resources语句来自动关闭流,同时也可以使用IOUtils类中的方法来简化流的读取操作。修改后的代码如下:

    public static void change() throws IOException {
        Class1 class1 = new Class1();
        class1.setInputStream(new FileInputStream(new File("e://a.txt")));
    
        Class2 class2 = MapperUtils.INSTANCE.map(Class2.class, class1);
    
        try (InputStream inputStream = class2.getInputStream();
             ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
            IOUtils.copy(inputStream, bos);
            byte[] result = bos.toByteArray();
            // 对result进行操作
        }
    } 
    
    

    其中,IOUtils.copy方法可以将输入流中的数据复制到输出流中,这里使用了ByteArrayOutputStream作为输出流,最后通过toByteArray方法获取字节数组。同时,try-with-resources语句会自动关闭输入流和输出流,避免了手动关闭流的繁琐操作。

    评论

报告相同问题?