`
jinnianshilongnian
  • 浏览: 21424244 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2403122
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:2996146
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5630387
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:257181
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1592644
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:248792
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5845630
Group-logo
跟我学Nginx+Lua开...
浏览量:697465
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:779839
社区版块
存档分类
最新评论

【第四章】 资源 之 4.1 基础知识 ——跟我学spring3

阅读更多

4.1.1  概述

       在日常程序开发中,处理外部资源是很繁琐的事情,我们可能需要处理URL资源、File资源资源、ClassPath相关资源、服务器相关资源(JBoss AS 5.x上的VFS资源)等等很多资源。因此处理这些资源需要使用不同的接口,这就增加了我们系统的复杂性;而且处理这些资源步骤都是类似的(打开资源、读取资源、关闭资源),因此如果能抽象出一个统一的接口来对这些底层资源进行统一访问,是不是很方便,而且使我们系统更加简洁,都是对不同的底层资源使用同一个接口进行访问。

       Spring 提供一个Resource接口来统一这些底层资源一致的访问,而且提供了一些便利的接口,从而能提供我们的生产力。

4.1.2  Resource接口

       Spring的Resource接口代表底层外部资源,提供了对底层外部资源的一致性访问接口。

 

java代码:
public interface InputStreamSource {
    InputStream getInputStream() throws IOException;
}

 

java代码:
public interface Resource extends InputStreamSource {
       boolean exists();
       boolean isReadable();
       boolean isOpen();
       URL getURL() throws IOException;
       URI getURI() throws IOException;
       File getFile() throws IOException;
       long contentLength() throws IOException;
       long lastModified() throws IOException;
       Resource createRelative(String relativePath) throws IOException;
       String getFilename();
       String getDescription();
}

 

 

1)InputStreamSource接口解析:

         getInputStream每次调用都将返回一个新鲜的资源对应的java.io. InputStream字节流,调用者在使用完毕后必须关闭该资源。

2)Resource接口继承InputStreamSource接口,并提供一些便利方法:

         exists返回当前Resource代表的底层资源是否存在,true表示存在。

         isReadable返回当前Resource代表的底层资源是否可读,true表示可读。

         isOpen返回当前Resource代表的底层资源是否已经打开,如果返回true,则只能被读取一次然后关闭以避免资源泄露;常见的Resource实现一般返回false。

         getURL如果当前Resource代表的底层资源能由java.util.URL代表,则返回该URL,否则抛出IOException。

         getURI如果当前Resource代表的底层资源能由java.util.URI代表,则返回该URI,否则抛出IOException。

         getFile如果当前Resource代表的底层资源能由java.io.File代表,则返回该File,否则抛出IOException。

         contentLength返回当前Resource代表的底层文件资源的长度,一般是值代表的文件资源的长度。

         lastModified返回当前Resource代表的底层资源的最后修改时间。

         createRelative用于创建相对于当前Resource代表的底层资源的资源,比如当前Resource代表文件资源“d:/test/”则createRelative(“test.txt”)将返回表文件资源“d:/test/test.txt”Resource资源。

         getFilename返回当前Resource代表的底层文件资源的文件路径,比如File资源“file://d:/test.txt”将返回“d:/test.txt”,而URL资源http://www.javass.cn将返回“”,因为只返回文件路径。

         getDescription返回当前Resource代表的底层资源的描述符,通常就是资源的全路径(实际文件名或实际URL地址)。

 

Resource接口提供了足够的抽象,足够满足我们日常使用。而且提供了很多内置Resource实现:ByteArrayResource、InputStreamResource 、FileSystemResource 、UrlResource 、ClassPathResource、ServletContextResource、VfsResource等。

 

原创内容 转自请注明【http://sishuok.com/forum/blogPost/list/0/2455.html

  • 大小: 1.1 MB
  • 大小: 1.1 MB
  • 大小: 1.5 MB
分享到:
评论
8 楼 渺渺兮予怀 2017-03-05  
是java.net.URL和java.net.URI
7 楼 buffering 2015-08-09  
xiefengfeng 写道
"isOpen:返回当前Resource代表的底层资源是否已经打开,如果返回true,则只能被读取一次然后关闭以避免内存泄漏"

不是避免内存泄露,而是避免资源泄露


资源泄露什么意思,可否解释一下场景。
6 楼 jinnianshilongnian 2014-07-28  
xiefengfeng 写道
"isOpen:返回当前Resource代表的底层资源是否已经打开,如果返回true,则只能被读取一次然后关闭以避免内存泄漏"

不是避免内存泄露,而是避免资源泄露

谢谢 已修正
5 楼 xiefengfeng 2014-07-27  
"isOpen:返回当前Resource代表的底层资源是否已经打开,如果返回true,则只能被读取一次然后关闭以避免内存泄漏"

不是避免内存泄露,而是避免资源泄露
4 楼 fjguodong 2013-06-29  
mark! 1
3 楼 东方胜 2013-05-31  
学习了。前辈
2 楼 lsjinpeng 2012-09-24  
mark 这个看看
1 楼 to_zoe_yang 2012-04-28  
Class InputStreamResource

Method Summary
boolean equals(Object obj)
          This implementation compares the underlying InputStream.
boolean exists()
          This implementation always returns true.
String getDescription()
          This implementation returns the passed-in description, if any.
InputStream getInputStream()
          This implementation throws IllegalStateException if attempting to read the underlying stream multiple times.
int hashCode()
          This implementation returns the hash code of the underlying InputStream.
boolean isOpen()
          This implementation always returns true.
 

相关推荐

Global site tag (gtag.js) - Google Analytics