gpt4 book ai didi

java - 以其他语言读取的 ObjectOutputStream

转载 作者:行者123 更新时间:2023-12-03 04:36:03 28 4
gpt4 key购买 nike

我曾经使用带有 Java 的 Android Studio 在 Android 中保存项目。但是现在我想在我用 Flutter SDK(Dart 语言)重写的应用程序中准确地读取这些数据。但似乎编写的文件非常特定于 Java。这是 Java 中的保存和加载方法。

public void save(Item item)
{
String json = gson.toJson(item);
FileOutputStream fos = null;
try {
fos = context.openFileOutput("item_"+ item.getUid(), Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(json);
os.close();
fos.close();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}


private Item loadItem(String fileName)
{
FileInputStream fis = null;
try {
fis = context.openFileInput(fileName);
ObjectInputStream is = new ObjectInputStream(fis);
Object object = is.readObject();
Item item = null;
String json = (String)object;
item = gson.fromJson(json, Item.class);
is.close();
fis.close();
return item;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
现在在 Dart 中阅读它
Uint8List bytes = f.readAsBytesSync();
var data = bytes.buffer.asByteData();
// HOW TO DETECT JAVA
if (?SOMETHING?) { }
bytes的长度相当大。它是一个长度 = 3 245 500 的数组。
json 字符串的长度应该在 740 到 840 字节之间(即相对较短的 json)。
我怎么能只读取 json 部分而不是整个 Java '开销'/'java 序列化格式'
enter image description here

最佳答案

您目前正在做的是:

  • 序列化为 JSON
  • 使用 Java 序列化
  • 使用 JSON 数据序列化 Java 字符串

    相反,将您的代码更改为:
  • 序列化为 JSON(直接到文件,或首先到字符串,然后使用 OutputStreamWriter 包装 FileOutputStream 到文件)。

  • 尝试用另一种语言重新实现 Java 序列化是非常痛苦的,而且您当前对 Java 序列化的使用意义不大,而且这是不必要的开销,只会让您的生活更加艰难。将其从组合中删除并将 JSON 直接写入文件。
    它将简化您的代码,并消除在 Dart 中实现 Java 序列化的需要。
    为了能够处理以这种 Java 序列化包装 JSON 数据的组合编写的当前文件,我建议在 Java 应用程序中使用一些额外的代码来检测文件是否为 Java 序列化,如果是,则进行一次性转换以存储 JSON直接地。
    或者,您可以阅读 Java Object Serialization Specification 中的 Java 序列化协议(protocol)。 .

    关于java - 以其他语言读取的 ObjectOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64061157/

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