将不同类型的变量保存到文件中

Posted

技术标签:

【中文标题】将不同类型的变量保存到文件中【英文标题】:Save diffrent kind of variables to a file 【发布时间】:2015-04-12 08:34:24 【问题描述】:

我想。目前我正在使用DataOutputStream 这样做。首先我保存一个短裤数组,然后我保存另一个短裤数组,然后我想保存一个多头数组。问题是当我阅读文件时,我不知道我保存了多少短裤。我不知道第一个短数组有多大。

我可以通过指定一个让我知道短数组何时停止的值来解决这个问题。例如,我说值 -99999 告诉我数组何时结束。但是短数组在结束之前包含值 -99999 的可能性很小。

有没有办法创建标记?还是应该为每个数组创建不同的文件?

【问题讨论】:

好吧,如果您只需要分隔数字,我认为分隔符最好是字母。 @Alex 是的,这解决了我的问题,哈哈。谢谢,抱歉这个愚蠢的问题:),发表你的评论作为答案然后我可以关闭它,还是我应该删除这个问题? 为什么不将其保存为易于解析的标准格式(如 JSON 或 XML),而不是发明自己的格式? @JB Nizet,使用 xml 保存时间会更长,文件也会更大,对吧? @Alexanus 所以使用 JSON! 【参考方案1】:

你应该先写数组长度,然后写数组,这样你就知道要读取多少项了。

【讨论】:

【参考方案2】:

先读取数组的长度,再读取那么多元素

【讨论】:

【参考方案3】:

你可以用这个

写作:

short[] shorts1 = ...; //an array
short[] shorts2 = ...; //another array
long[] longs = ...; //another array
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("the filename"))) 
    out.writeObject(shorts1);
    out.writeObject(shorts2);
    out.writeObject(longs);
    out.flush();
 catch (IOException e) 
    e.printStackTrace();

此代码首先将两个单独的短数组写入一个文件,然后再写入一个长数组。

阅读:

short[] shorts1;
short[] shorts2;
long[] longs;
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("the filename"))) 
    shorts1 = (short[])in.readObject();
    shorts2 = (short[])in.readObject();
    longs = (long[])in.readObject();
 catch (IOException | ClassNotFoundException e) 
    e.printStackTrace();

此代码从写入它们的文件中读取两个单独的短数组和长数组。

【讨论】:

@jenzz 是的,使用 ObjectOutputStream.writeObject (someArray) 请解释为什么这解决了 OP 的问题,这与读取而不是写入对象有关。 我已经澄清了我的答案 呃,不,你没有。你只是给出了代码,而不是解释它是如何回答这个问题的。 @QPaysTaxes 两个短数组是分开的吧?

以上是关于将不同类型的变量保存到文件中的主要内容,如果未能解决你的问题,请参考以下文章

SAS 中的数据分流到不同的文件当中

C ++创建不同扩展名的文件

在jetstream更新表单中更新用户配置文件时,将用户的不同类型数据保存在不同的表中

在同一个 CSV 文件中保存多个不同大小的列/变量

如何将变量存储在不同文件的数组中

变量的两种不同类型