Spring源码之资源文件处理相关类

1. InputStreamSource

        意义:封装任何能返回InputStream的类,比如File、Classpath下的资源和ByteArray等

        源码:

public interface InputStreamSource {

	/**
	 * Return an {@link InputStream} for the content of an underlying resource.
	 * <p>It is expected that each call creates a <i>fresh</i> stream.
	 * <p>This requirement is particularly important when you consider an API such
	 * as JavaMail, which needs to be able to read the stream multiple times when
	 * creating mail attachments. For such a use case, it is <i>required</i>
	 * that each {@code getInputStream()} call returns a fresh stream.
	 * @return the input stream for the underlying resource (must not be {@code null})
	 * @throws java.io.FileNotFoundException if the underlying resource doesn't exist
	 * @throws IOException if the content stream could not be opened
	 *
	 * Resource接口封装了底层资源,封装任何能返回InputStream的类
	 */
	InputStream getInputStream() throws IOException;

}

2. Resource

        意义:抽象了所有Spring内部使用到的底层资源File、URL、Classpath等

        源码:

public interface Resource extends InputStreamSource {

	/**
	 * 定义了4个判断当前资源状态的方法:存在性、可读性、是否处于打开状态和File类
	 */
	boolean exists();
	default boolean isReadable() {
		return exists();
	}
	default boolean isOpen() {
		return false;
	}
	default boolean isFile() {
		return false;
	}
    /**
     * 提供了不同资源到URL、URI、File类型的转换
     */
	URL getURL() throws IOException;
	URI getURI() throws IOException;
	File getFile() throws IOException;

	default ReadableByteChannel readableChannel() throws IOException {
		return Channels.newChannel(getInputStream());
	}

	long contentLength() throws IOException;

    /**
     * 提供了获取lastModified属性和文件名的方法
     */
	long lastModified() throws IOException;
    String getFilename();
    
    // 提供了基于当前资源创建一个相对资源的方法
	Resource createRelative(String relativePath) throws IOException;

    // 在错误处理中打印信息
	String getDescription();

}

3. 对于不同的资源文件都有相应的Resource实现:FileSystemResource、ClasspathResource、UrlResource、InputStreamResource、ByteArrayResource等

         ClasspathResource:getInputStream实现方式是通过class或classLoader提供的底层方法

         FileSystemResource:getInputStream实现方式是直接使用FileInputStream对文件进行实例化

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值