引入 pom.xml 依赖:
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-api</artifactId>
<version>1.0.10</version>
</dependency>
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-core</artifactId>
<version>1.0.10</version>
</dependency>
工具类:
/**
* file 持久化、反持久化
*
*/
public class PersistentUtil
{
/**
* 持久化到文件
* @param filepath 文件路径格式:<b>"./fold1/fold2/data.txt"</b>
* @param obj 对象
* @param <T>
* @throws IOException
*/
public static <T> void save(String filepath, T obj) throws IOException
{
byte[] serializer = ProtostuffUtil.serializer(obj);
ByteBuffer byteBuffer = ByteBuffer.wrap(serializer);
write(filepath, byteBuffer);
}
/**
* 反持久化到内存
* @param filepath 文件路径
* @param clazz 对象类型
* @param <T>
* @return
* @throws IOException
*/
public static <T> T load(String filepath, Class<T> clazz) throws IOException
{
ByteBuffer byteBuffer = read(filepath);
byte[] bytes = byteBuffer.array();
return ProtostuffUtil.deserializer(bytes, clazz);
}
/**
* 读文件
* @param filepath 文件路径
* @return
* @throws IOException
*/
private static ByteBuffer read(String filepath) throws IOException
{
try (FileInputStream fis = new FileInputStream(filepath);
FileChannel channel = fis.getChannel();)
{
// 一次性加载到内存才能反序列化
ByteBuffer buffer = ByteBuffer.allocate((int) channel.size());
channel.read(buffer);
buffer.rewind();
return buffer;
}
}
/**
* 写文件
* @param filepath
* @param buffer
* @throws IOException
*/
private static void write(String filepath, ByteBuffer buffer) throws IOException
{
createFile(filepath);
try (FileOutputStream fos = new FileOutputStream(filepath);
FileChannel channel = fos.getChannel();)
{
channel.write(buffer);
}
}
/**
* 创建文件
* @param filepath 文件路径格式:<b>"./fold1/fold2/data.txt"</b>
* @return
* @throws IOException
*/
private static File createFile(String filepath) throws IOException
{
File file = new File(filepath);
if (!file.exists())
{
// 先创建父路径
file.getParentFile().mkdirs();
// 再创建子文件
file.createNewFile();
}
return file;
}
}
测试用例:
public static void main(String[] args) throws Exception
{
// 持久化到本地磁盘
String s = "is a good day!";
PersistentUtil.save("./test/test.txt", s);
// 反持久化到内存
String ss = PersistentUtil.load("./test/test.txt", String.class);
System.out.println(ss);
}
|