spring 中的资源访问和加载 Resource AbstractResource介绍:
spring 中定义了资源接口,部分类关系如下:
1 getURI 方法实现: public URI getURI() throws IOException { URL url = getURL(); try { return ResourceUtils.toURI(url); } catch (URISyntaxException ex) { throw new NestedIOException("Invalid URI [" + url + "]", ex); } }
public static URI toURI(URL url) throws URISyntaxException { return toURI(url.toString()); }
public static URI toURI(String location) throws URISyntaxException { return new URI(StringUtils.replace(location, " ", "%20")); }
2 contentLength 方法实现逻辑:判断输入流有多少字节
public long contentLength() throws IOException { InputStream is = getInputStream(); Assert.state(is != null, "Resource InputStream must not be null"); try { long size = 0; byte[] buf = new byte[255]; int read; while ((read = is.read(buf)) != -1) { size += read; } return size; } finally { try { is.close(); } catch (IOException ex) { } } }
getInputStream 方法在子类中实现。