簡體   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