gpt4 book ai didi

java - 将数组列表保存到缓存文件并检索它

转载 作者:行者123 更新时间:2023-12-01 14:59:54 24 4
gpt4 key购买 nike

我想创建两个方法。一个应该将 arraylist 存储到缓存中,另一个应该从缓存中检索 arraylist。我尝试过的代码如下:

public class ByteConverter<T> {

public byte[] write_to_byte_array(ArrayList<T> list,File file){

// write to byte array
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
} catch (FileNotFoundException e1) {
Log.d("file not found", "file not found", e1);
}

ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(baos);
for (T element : list) {
try {
out.writeUTF((String) element);
} catch (IOException e) {
Log.d("Error converting List to byte array", "Error converting List to byte array", e);
}
}

byte[] bytes = baos.toByteArray();

int len1 = 0;
while (len1 < bytes.length) {
try {
fos.write(bytes, 0, len1);
len1++;
} catch (IOException e) {
e.printStackTrace();
}
}
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}

return bytes;

}

public String read_to_byte_array(byte[] bytes) throws IOException{

// read from byte array
String element = null;
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
DataInputStream in = new DataInputStream(bais);
while (in.available() > 0) {
element = in.readUTF();
}

return element;
}

}

但是上述方法不会向文件写入任何内容。我不知道为什么。谁能帮我?另外,我在这一行遇到了 ClassCastException:

       out.writeUTF((String) element);

最佳答案

首先,ClassCastExcetion 是您没有获得任何输出的原因。在代码写入文件之前抛出异常...

其次,发生 ClassCastException 是因为该元素不是 String。理论上,您可以调用 element.toString() 来获取字符串表示形式,但该表示形式很可能不适合您的目的。

那么正确的做法是什么?

这取决于list中对象的类型。

  • 如果它们实现了Serialized(或Externalizable),那么您应该能够使用Java 序列化。阅读 this section Java 教程的更多详细信息。

  • 另一种选择可能是使用 JAXP 或 GS​​ON 之类的东西,它们可以分别将 POJO 序列化为 XML 和 JSON。

  • 最后的后备方案是手动编写序列化方法(以及相应的序列化方法)。

<小时/>

最后,我应该指出您的代码中的一些其他错误:

1)这段代码是错误的:

int len1 = 0;
while (len1 < bytes.length) {
fos.write(bytes, 0, len1);
len1++;
}

这将写:

bytes[0]
bytes[0], bytes[1]
bytes[0], bytes[1], bytes[2]

and so on.

写入字节的正确方法是:

fos.write(bytes);

fos.write(bytes, 0 bytes.length);

2) 你的异常处理逻辑不正确。在 3 或 4 个地方,您捕获异常,打印或记录一些内容......然后继续,就像没有发生任何错误一样。您可能应该做的是让异常传播,并在更高级别处理它们。

3) 如果 write_to_byte_array 方法出现问题,则可能会泄漏文件描述符。最佳实践是关闭 finally block 中的资源,或使用新的 Java 7 try-with-resource 语法。

4) read_to_byte_arraywrite_to_byte_array 方法的名称违反了公认的 Java 风格准则。它们应该是readToByteArray(或者更好的是readFromByteArray)和writeToByteArray

关于java - 将数组列表保存到缓存文件并检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13821972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com