它是什么以及何时使用它?我必须为我的作业(创建银行系统)做这件事但我不知道它的哪一部分?
答案 0 :(得分:2)
您需要比这更具体,但一般来说这意味着读取和写入二进制文件的值。根据您的作业问题,可能会定义文件的实际格式,或者您可能需要自己决定格式。这通常意味着特定类型的特定顺序。例如,文件格式可能是:
当然,这有点过于简单了。
在Java中,一种(相对)简单的入门方法是DataInputStream和DataOutputStream类,它们允许您从输入和输出流(可能是文件,在你的情况下)。
答案 1 :(得分:2)
由于“什么”部分已被回答,我将专注于你问题的“何时”。
当您需要高效存储和更快的数据处理时,通常会使用二进制格式。它们在空间上更有效率,因为二进制表示本质上更紧凑。由于二进制格式通常具有结构,因此您可以轻松快速地“浏览”其内容。
假设您有一个名为“John Doe”的帐户持有人,帐户“123-45678-34567”,客户卡“1234-5678-1234-5678”,以及两个帐户:储蓄($ 12,456.78)和支票($ 1,234.56) )。如果您将数据库作为简单文本文件,则可以保存这样的数据:
"John Doe" 123-45678-34567 1234-5678-1234-5678 12,456.78 1,234.56\n
所有数据都是数据库文件中的文本行(“\ n”是换行符)。人类很容易理解,甚至可以毫无困难地修改。但是对于你的程序,你需要解析每一行以理解它(例如:加载储蓄账户中有多少钱),然后做你需要的任何操作(例如:更新节省总额),转换回文本格式并再次保存。现在想象一下,如果你有数以千计的账户,以及数百万的日常运营。您显然需要花费大量时间从文本解析为二进制(以便计算机可以实际执行某些操作),然后转换回文本并保存到磁盘。浏览此文件(搜索“John Doe”的帐户)也非常耗时。
对于二进制文件,您需要类似的结构感,但您还需要进一步规划。并非所有客户都具有相同的名称长度或相同金额,因此您必须设置一些合理的限制 - 毕竟,您不想浪费空间为名称预留许多字符(例如,256),其中通常32个字符就足够了。您还需要有一个数字字段的范围概念。
为简单起见,我们假设64位整数(Java的长基本类型)足以满足您的所有数字需求(有关范围的更多信息,请参阅this link)。在这种情况下,在家庭作业银行中存储帐户的每条记录都有5个字段:
在这种情况下,每条记录的固定长度为32 + 4 * 8 = 64字节。对于这个例子,它几乎与上面的单行相同,但请记住,这是一个非常简单的场景:真实银行将有更详细的信息,包括帐户的历史记录等。
这里的要点是你应该能够看到在这样的二进制文件中导航要简单得多:你只需从文件中的特定位置加载原始记录,你就完成了 - 没有文本解析需要。如果按文件持有者的名称对文件进行排序,则可以在O(log(n))时间内搜索和检索记录,而不是O(n)(如果未排序)或文本文件(除非使用固定长度的行)。完成更新记录后,只需将其保存回磁盘即可。
随着二进制格式的发展,您可能希望在文件中的某个特定位置包含摘要信息,通常是文件的第一个字节。这样的特殊记录是标题,除了描述有用的信息(例如:文件中有多少个帐户)之外,标题本身可能包含允许您将文件识别为您期望的格式的信息,通常包括识别令牌(再次)在特定的地方。
二进制文件比这篇文章更容易处理,所以我建议你看一些例子来了解如何用Java做这件事(例如this other link)。当然还有很多其他的。
答案 2 :(得分:1)
二进制保存和加载是一种保存文件的方法。另一种方式是文本保存和加载。保存文本是您可能熟悉的 - 您保存的文件由字母和数字(普通文本)组成。二进制保存和加载是存储人类不可读的数据,如字母和数字,但它是数字的更“本机”表示(即不是为数字7保存“7”,它可能存储00000111,这是数字7的二进制表示。
对于您的银行系统作业,您可能希望使用二进制保存和加载来存储有多少钱。