我正在尝试快速读取文件。之前我使用过JSON格式但后来我使用二进制文件减小了文件大小。我只是无法弄清楚如何使用文件中的泛型读取。
对于JSON,我使用了TypeReference
public <T> T read(final TypeReference<T> type, String path, String fileName) {
T data = null;
try {
checkDir(path);
String pathAll = homePath + path + "/" + fileName;
data = new ObjectMapper().readValue(new File(pathAll), type);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
但对于二进制文件我找不到类似的东西。所以我只是使用了抑制警告
@SuppressWarnings("unchecked")
public <T> T readSerializable(String path, String fileName) {
Object data = null;
checkDir(path);
String pathAll = homePath + path + "/" + fileName;
ObjectInputStream inputStream = null;
try {
inputStream = new ObjectInputStream(new FileInputStream(pathAll));
data = inputStream.readObject();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return (T) data;
}
有没有办法如何使用typereference从二进制文件中读取?或者我应该留下警告,但是它并不比使用JSON慢,因为Java需要&#34;弄清楚&#34;应该是什么样的合适类型?文件的大小约为json的一半,但如果大数据的速度要慢得多,我会坚持使用json ......
所以我一般有两个问题: 1)我可以使用typereference作为第二个例子吗? 2)如果不是/是将比第一(其他)类型的读数更快/更慢?
由于
答案 0 :(得分:0)
您可以通过提供Class<T>
这样的对象来绕过警告:
public <T extends Serializable> T readSerializable(String path, Class<T> clazz) {
ObjectInputStream is = null;
try {
is = new ObjectInputStream(new FileInputStream(path));
return clazz.cast(is.readObject());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
我不认为ObjectOutputStream
它的类型是什么。最后它返回Object
。目标演员表由开发人员提供。所以我猜没有性能下降。