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

Posted miaoww

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于src路径问题,深层理解的实践。且对于输出流write()两个方法的源码阅读。相关的知识,希望对你有一定的参考价值。

根据昨天的总结,可深层理解图片中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()两个方法的源码阅读。的主要内容,如果未能解决你的问题,请参考以下文章

关于IO流中的输入流输出流的理解

DMS深层肌肉松解仪放松效果好吗?

网络流--最小费用最大流 (理解)

POJ 3686 The Windy's | 最小费用最大流

流与缓冲区的理解

最小路径覆盖问题网络流24题