繁体   English   中英

从randomaccessfile读取数据

[英]reading data from a randomaccessfile

这是我的功能:

// Read a record from the specified RandomAccessFile
   public void read( RandomAccessFile file ) throws IOException    {
      account = file.readInt();
      byte b1[] = new byte[ 15 ];
      file.readFully( b1 );
      firstName = new String( b1, 0 );
      firstName = firstName.trim();
      byte b2[] = new byte[ 15 ];
      file.readFully( b2 );
      lastName = new String( b2, 0 );
      lastName = lastName.trim();
      balance = file.readDouble();
   }

我必须能够从randomaccessfile中读取一份我的考试,并且上面的代码有些令人困惑。

这是我正在猜测的事情,如果我错了,您可以纠正我,将不胜感激。

我们接收file ,并从filereadInt并将其分配给account 接下来,我想我们创建一个大小为15的新字节,并将文件中的名字读入该字节,然后分配给firstname 现在这是我不了解的内容, readFully做什么? 以及上面的代码如何知道要移至lastName的下一个值。 简而言之,

byte b1[] = new byte[ 15 ];
      file.readFully( b1 );
      firstName = new String( b1, 0 );
      firstName = firstName.trim();

VS

      byte b2[] = new byte[ 15 ];
      file.readFully( b2 );
      lastName = new String( b2, 0 );
      lastName = lastName.trim();
      balance = file.readDouble();

为什么它没有给出相同的值? 我们是否在猜测每个值(名字,姓氏等)多长时间?

正如api所说:

从当前文件指针开始,将b.length个字节从此文件读取到字节数组中。 此方法从文件重复读取,直到读取了请求的字节数。

    public void write(RandomAccessFile file) throws IOException {
    file.writeInt(account);
    byte b1[] = new byte[15];
    // set firstname to b1
    file.write(b1);
    byte b2[] = new byte[15];
    // set lastname to b2
    file.write(b2);
    double balance =123.1;
    file.writeDouble(balance);
}

如果您生成的文件与上面的文件完全一样,则可以阅读进度。

如果这是学校/大学考试,请记住,他们知道故意有荒唐之举,以使您感到困惑。

考虑您发布的代码中的注释:

从指定的RandomAccessFile读取记录

我敢打赌,它定义为您正在读取的二进制文件具有存储在这样的记录中的数据:

  • 帐户-4B(整数大小)
  • 名-15B
  • 姓-15B
  • 天平-8B

我还打赌,应该假定数据已正确写入-完全按照上述顺序和长度表示。 如果不是这样,例如,有一个字符串而不是整数,或者名字较大,则可能会导致错误或数据解释错误-这就是您的代码片段给出不同结果的原因。

无论如何,这是一个二进制文件 ,如果要读取它,则现在必须准确编写该文件的格式。 否则,就像解密外星人的信件一样。

至于RandomAccessFile.readFullyMethod

从当前文件指针开始,将b.length个字节从此文件读取到字节数组中。 此方法从文件重复读取直到 读取 了请求的字节数为止 该方法将阻塞,直到 读取请求的字节数,检测到流的末尾或引发异常 为止

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM