码迷,mamicode.com
首页 > 其他好文 > 详细

对于src路径问题,深层理解的实践。且对于输出流write()两个方法的源码阅读。

时间:2018-03-14 19:07:07      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:实践   div   地图   set   fileinput   man   cep   rac   16px   

根据昨天的总结,可深层理解图片中src的路径。所以今天实现了一个想法。就是路径写入的是Controller,然后自动去本地找。

其实就是将电脑的本地图片 显示出来。通过输出流的方式。

代码如下:

@RequestMapping(value = "/img/{id}")
    public void img(@PathVariable(value = "id") String id,HttpServletResponse response) {
        File file = new File("D:\\img\\" + id + ".jpg");
        System.out.println(file);
        try {
            InputStream inputStream = new FileInputStream(file);
            OutputStream outputStream = response.getOutputStream();
            byte[] b = new byte[1024];
            int a = -1;
            while ((a = inputStream.read(b)) != -1) {
                outputStream.write(b);
                System.out.println(a);
            }
            response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode("a.jpg", "UTF-8"));
            inputStream.close();
            outputStream.flush();
            outputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

可是无法正常显示。发现打开的文件图片大小为1kb,实际图片为43kb。

最后发现了是输出流写的过程中,发生的错误。其实,就是方法的问题。

换成outputStream.write(b,0,a);就好了

所以接下来,我去读一下write(Byte[]),和write(Byte[],0,length)两个方法的区别。

  • write(byte b[])

public void write(byte b[]) throws IOException {
        write(b, 0, b.length);
    }

 

所以可以看到,此方法内部调用的 write(b, 0, b.length);

 

 

 可突然发现,重新用回write(byte b[])方法,依然好用。那我之前是见鬼了么???

[○?`Д′? ○]

 

对于src路径问题,深层理解的实践。且对于输出流write()两个方法的源码阅读。

标签:实践   div   地图   set   fileinput   man   cep   rac   16px   

原文地址:https://www.cnblogs.com/miaoww/p/8569479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!