Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是二进制存储和加载?_Java - Fatal编程技术网

Java 什么是二进制存储和加载?

Java 什么是二进制存储和加载?,java,Java,它是什么?我们什么时候使用它?我必须做作业(创建银行系统),但我不知道这是为了哪一部分?二进制保存和加载是保存文件的一种方式。另一种方法是文本保存和加载。文本保存是您可能熟悉的-您保存的文件由字母和数字(普通文本)组成。二进制保存和加载存储的数据不像字母和数字那样是人类可读的,但它更像是数字等数据的“本机”表示(即,它可能存储00000111,这是数字7的二进制表示,而不是为数字7保存“7”) 对于您的银行系统作业,您可能希望使用二进制存储和加载来存储某人有多少钱。您需要更具体一点,但通常这意味

它是什么?我们什么时候使用它?我必须做作业(创建银行系统),但我不知道这是为了哪一部分?

二进制保存和加载是保存文件的一种方式。另一种方法是文本保存和加载。文本保存是您可能熟悉的-您保存的文件由字母和数字(普通文本)组成。二进制保存和加载存储的数据不像字母和数字那样是人类可读的,但它更像是数字等数据的“本机”表示(即,它可能存储00000111,这是数字7的二进制表示,而不是为数字7保存“7”)


对于您的银行系统作业,您可能希望使用二进制存储和加载来存储某人有多少钱。

您需要更具体一点,但通常这意味着读取和写入二进制文件中的值。根据你的家庭作业问题,文件的实际格式可能会被定义,或者你可能需要自己决定格式。这通常意味着特定类型的特定顺序。例如,文件格式可能是:

  • 整数,此文件中的帐户数
  • 一个整数,第一个帐户的帐号
  • A长,账户中的金额(美分)
  • 整数,帐户持有人姓名中的字符数
  • 代表帐户持有人姓名的几个字符
  • 重复,从第二个帐户的帐号开始
当然,这有点过于简单化了

在Java中,一个(相对)简单的入门方法是and类,它允许您从输入和输出流(在您的例子中可能是一个文件)进行读写。

既然“什么”部分已经回答了,我将重点讨论您问题的“何时”

当您需要高效的存储和更快的数据处理时,通常使用二进制格式。它们在空间上更高效,因为二进制表示本质上更紧凑。由于二进制格式通常有一个结构,您可以轻松快速地“导航”其内容

假设您有一个名为“John Doe”的账户持有人,账户为“123-45678-34567”,客户卡为“1234-5678-1234-5678”,还有两个账户:储蓄账户(12456.78美元)和支票账户(1234.56美元)。如果将数据库作为简单文本文件保存,则可以按如下方式保存数据:

"John Doe" 123-45678-34567 1234-5678-1234-5678 12,456.78 1,234.56\n
所有数据都是数据库文件中的文本行(“\n”是换行符)。人类很容易理解,甚至可以毫不费力地修改。但是对于您的程序,您需要解析每一行来理解它(例如:加载储蓄帐户中有多少钱),然后执行您需要的任何操作(例如:更新储蓄总额),转换回文本格式并再次保存。现在想象一下,如果你有数千个帐户和数百万的日常操作。很明显,您需要花费大量时间将文本解析为二进制(以便计算机能够实际执行某些操作),然后再转换回文本并保存到磁盘。在这个文件中导航(搜索“John Doe”的帐户)也很耗时

对于二进制文件,您需要类似的结构感,但还需要计划更多。并非所有的客户都有相同的名称长度或相同的金额,因此您必须设置一些合理的限制——毕竟,您不想浪费空间为名称保留许多字符(例如256个),其中32个字符通常就足够了。您还需要对数值字段的范围有一个概念

为了简单起见,让我们假设64位整数(Java的长基元类型)足以满足所有数字需求(有关范围的更多信息,请参阅)。在这种情况下,在家庭作业银行中存储帐户的每个记录都有5个字段:

  • 帐户持有人的姓名,30个字符的固定长度字符串
  • 帐号为长整数类型
  • 借记卡号为长
  • 储蓄账户金额,作为长期存款
  • 支票账户的金额,也可以作为一个长账户
  • 在这种情况下,每条记录的固定长度为32+4*8=64字节。对于本例,它几乎与上面的单行相同,但请记住,这是一个非常简单的场景:真实的银行将拥有更详细的信息,包括帐户的历史记录等

    这里的要点是,您应该能够看到,在这样的二进制文件中导航要简单得多:您只需从文件中的特定位置加载一条原始记录,就完成了—不需要进行文本解析。如果按帐户持有人的姓名对文件进行排序,则可以在O(log(n))时间内搜索和检索记录,而不是在未排序时搜索和检索O(n)或文本文件(除非使用固定长度的行)。更新完记录后,只需将其保存回磁盘

    随着二进制格式的发展,您可能希望在文件中的某个特定位置包括摘要信息,通常是文件的第一个字节。这种特殊记录是标题,除了描述有用的信息(例如:文件中有多少帐户)外,标题本身还可能包含允许您识别文件格式的信息,通常通过在(再次)特定位置包含标识令牌

    二进制文件比这篇文章感觉的更容易处理,所以我建议您看看一些示例,了解如何在Java中(例如,在中)实现这一点。当然还有很多其他的