对于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[];
int a = -;
while ((a = inputStream.read(b)) != -) {
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, , b.length);
}
所以可以看到,此方法内部调用的 write(b, 0, b.length);
可突然发现,重新用回write(byte b[])方法,依然好用。那我之前是见鬼了么???
[○・`Д´・ ○]
对于src路径问题,深层理解的实践。且对于输出流write()两个方法的源码阅读。的更多相关文章
- JDK 1.8 源码阅读和理解
根据 一篇文章教会你,如何做到招聘要求中的“要有扎实的Java基础” 的指引,决定开始阅读下JDK源码. 本文将作为源码阅读总纲 一.精读部分 java.io java.lang java.util ...
- winserver的consul部署实践与.net core客户端使用(附demo源码)
winserver的consul部署实践与.net core客户端使用(附demo源码) 前言 随着微服务兴起,服务的管理显得极其重要.都知道微服务就是”拆“,把臃肿的单块应用,拆分成多个轻量级的 ...
- JDK部分源码阅读与理解
本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/article/2016/05/31/JDK部分源码阅读与理解/ 不喜欢重复造轮子,不喜欢贴各种东西.JDK ...
- hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse
生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...
- [译] 理解PHP内部函数的定义(给PHP开发者的PHP源码-第二部分)
文章来自:http://www.hoohack.me/2016/02/10/understanding-phps-internal-function-definitions-ch 原文:https:/ ...
- Spring 源码阅读之 深入理解 finishBeanFactoryInitialization
源码入口 上篇博文中我们看到了将Spring环境中的 BeanPostProcessor找出来,添加到BeanFactory中的beanPostProcessors中,统一维护,本片博文继续往下拓展, ...
- HttpRunner3源码阅读:4. loader项目路径加载,用例文件转换、方法字典生成
loader.py 这个文件中主要是对yaml,json用例加载转换成用例处理, 预置函数加载成方法字典,路径加载等 可用资料 [importlib]. https://docs.python.org ...
- webrtc源码阅读理解一
webrtc是一个比较成熟的实时音视频处理开源项目,一上来老大就扔给我一本webrtc native实践,虽然狠下心"翻"完了一遍,但是还是云里雾里的,在经过几个月的摸索之后,我大 ...
- Open vSwitch源码阅读【转】及自己的理解【稍后更新】
http://blog.chinaunix.net/uid-24485075-id-2240075.html
随机推荐
- zsh切换bash bash切换zsh
切换bash(需要sudo) chsh -s /bin/bash 切换zsh(不需要sudo) chsh -s /bin/zsh 注意:如果输入命令和密码后提示:no change made. 请加上 ...
- vector底层实现
https://blog.csdn.net/u012658346/article/details/50725933 各个stl容器区别 https://blog.csdn.net/shawjan/ar ...
- 焦作网赛-G-欧拉降幂
https://nanti.jisuanke.com/t/31716 答案就是2^(n-1)%mod ,n非常的大,由欧拉降幂公式 AB%C=AB%phi(C)+phi(C)%C 化简 2n- ...
- PAT 1003 Emergency
1003 Emergency (25 分) As an emergency rescue team leader of a city, you are given a special map of ...
- xinetd黑/白名单配置教程(以telnet为例)
对于诸如telnet等托管于xinetd的服务,当请求到来时由于是通过xinetd进行通知,所以可以直接在xinetd上配置白名单允许和拒绝哪些ip连接服务. 本文主要参考xinetd.conf的ma ...
- Linux修改用户密码有效期
linux默认用户的密码是永不过期的,但是出于安全考虑在企业环境中一般会要求设置过期日期:但有时要求90天就过期,在这种严柯条件下我们有可能想给某个或某些用户开设后门,延长其密码有效期. 一.用户密码 ...
- nmon+nmon analyser安装使用教程
nmon一般是两种用法,一是交互式用法查看实时的内存/cpu/网络/磁盘等情况,二是抓取一段时间内的实时的内存/cpu/网络/磁盘记到csv格式的.nmon文件中然后用nmon analyse做可视化 ...
- weblogic开启http访问日志并实时写入日志文件
由于http访问会产生大量日志,耗去不少IO和CPU所以在生产一般是不启用的:但有时我们会想启用http访问日志,尤其是在系统上线调试的时候. weblogic的日志默认在domain_name/se ...
- vsftp的安装与配置
1.安装 直接使用yum安装,如果没有网络在其他机器使用yum先离线下载即可,vsftpd一般就自己不需要装其他依赖包 rpm -qa|grep vsftpd #查看是否安装 yum install ...
- Linux下使用timedatectl命令时间时区操作详解
timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具,它作为systemd系统和服务管理器的一部分,代替旧的传统的用在基于Linux分布 ...