001package gu.sql2java.store; 002 003import java.io.File; 004import java.io.IOException; 005import java.io.InputStream; 006import java.net.URI; 007import java.net.URL; 008import java.nio.ByteBuffer; 009 010/** 011 * 二进制数据存储接口 012 * @author guyadong 013 * 014 */ 015public interface URLStore { 016 /** 017 * 判断指定的URL是否当前实例的协议一致 018 * @param url 为{@code null}返回{@code false} 019 * @return 协议一致返回{@code true},否则返回{@code false} 020 */ 021 boolean isStored(URL url); 022 /** 023 * 判断URL指定的数据是否存在<br> 024 * @param url 为{@code null}返回{@code false} 025 * @return 数据存在返回{@code true},否则返回{@code false} 026 */ 027 boolean exists(URL url); 028 /** 029 * 保存二进制数据<br> 030 * @param <T> 数据类型可以是byte[],{@link InputStream},{@link ByteBuffer},{@link String}(base64编码), 031 * {@link File},{@link URL},{@link URI} 否则抛出{@link IllegalArgumentException}<br> 032 * @param input 二进制数据 033 * @param md5 二进制数据的MD5校验码,为{@code null}时会自动计算 034 * @param extension 数据类型(文件后缀),可为{@code null} 035 * @param overwrite 是否覆盖已存在数据 036 * @param makeURLOnly 为{@code true}时不存储数据只返回存储URL 037 * @return 保存的URL 038 * @throws IOException 039 */ 040 <T> URL store(T input, String md5, String extension, boolean overwrite, boolean makeURLOnly) throws IOException; 041 /** 042 * 删除{@code md5}指定的存储数据 043 * @param md5 044 * @return {@code true} if deleted, otherwise {@code false} 045 * @throws IOException 046 */ 047 boolean delete(String md5) throws IOException; 048 /** 049 * 保存二进制数据<br> 050 * 如果数据已经被保存则不做任何事 051 * @param url 052 * @param overwrite 是否覆盖已存在数据 053 * @param makeURLOnly 为{@code true}时不存储数据只返回存储URL 054 * @return 保存的URL 055 * @throws IOException 056 */ 057 URL store(URL url, boolean overwrite, boolean makeURLOnly) throws IOException; 058 /** 059 * 删除指定的存储数据 060 * @param url 存储的URL 061 * @return {@code true} if deleted, otherwise {@code false} 062 * @throws IOException 063 */ 064 boolean delete(URL url) throws IOException; 065 /** 066 * 返回当前存储实现的协议名 067 * @return 068 */ 069 String getProtocol(); 070 071 /** 072 * 设置当前线程有效的附加参数 073 * @param name 参数名 074 * @param value 参数值 075 * @return 当前对象 076 */ 077 BaseURLStore setAdditionalParam(String name, Object value); 078}