相关疑难解决方法(0)

哪个是Java序列化的最佳替代方案?

我目前正在开发一个项目,它需要持久保存任何类型的对象(我们没有任何控制权的实现),因此这些对象可以在之后恢复.

我们无法实现ORM,因为我们无法在开发时限制库的用户.

我们的第一个选择是使用Java默认序列化对其进行序列化,但是当用户开始传递同一对象的不同版本(属性更改类型,名称等)时,我们在恢复对象时遇到了很多麻烦.

我们尝试过使用XMLEncoder类(将对象转换为XML),但我们发现缺少功能(例如,不支持Enums).

最后,我们还尝试了JAXB,但这会强制我们的用户注释他们的类.

还有什么好办法吗

java serialization xml-serialization

47
推荐指数
7
解决办法
4万
查看次数

在close()之前使用flush()

根据java文档,在任何java.io Streams上调用close()会自动调用flush().但是我已经在很多例子中看到过,即使在生产代码中,开发人员在close()之前也明确地使用了flush().在什么条件下我们需要在close()之前使用flush()?

java iostream

46
推荐指数
3
解决办法
3万
查看次数

FileOutputStream:"close"方法是否也调用"flush"?

我对flush和close方法感到困惑.在我的代码中,我总是关闭我的FileOutputStream对象.但我想知道如果我必须在这里使用flush方法,我可以在哪里使用它?

我将编写一个重复下载4或5个文件的项目.我将编写一个方法(用于下载文件),我的方法将循环并重复下载文件.我的方法将有这样的代码.

close方法是否调用flush,或者在关闭之前是否必须使用flush?

try {
    InputStream inputStream = con.getInputStream();
    FileOutputStream outputStream = new FileOutputStream("C:\\programs\\TRYFILE.csv");

    int bytesRead = -1;
    byte[] buffer = new byte[4096];
    while ((bytesRead = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, bytesRead);
}

} catch(Exception e) {
    //
} finally {
    outputStream.close();
    inputStream.close();
}    
Run Code Online (Sandbox Code Playgroud)

请注意,代码运行良好:它成功下载文件.但我不确定使用flush.

java io fileoutputstream

19
推荐指数
1
解决办法
1万
查看次数