簡體   English   中英

為什么RandomAccessFile類中沒有readUnsignedInt?

[英]Why no readUnsignedInt in RandomAccessFile class?

我剛剛發現RandomAccessFile類中沒有readUnsignedInt ()方法。 為什么? 是否有任何解決方法從文件中讀取unsigned int?

編輯:

我想從文件中讀取unsigned int並將其放入一個長空間。

EDIT2:

不能使用readLong()。 它將讀取8個字節而不是4個字節。 文件中的數據在4字節范圍內具有無符號整數。

EDIT3:

在這里找到答案: http//www.petefreitag.com/item/183.cfm

Edit4:

如果數據文件是little-endian怎么樣? 我們需要先換位?

我這樣做:

long l = file.readInt() & 0xFFFFFFFFL;

位操作是必要的,因為向上擴展將延伸一個負號。


關於字節序。 據我所知,Java中的所有I / O都是以大端方式完成的。 當然,通常無關緊要(字節數組,UTF-8編碼等不受字節順序影響),但DataInput方法很多。 如果您的號碼以小端存儲,則必須自行轉換。 我所知道的標准Java中唯一的工具允許通過order()方法配置字節順序是ByteBuffer ,但是你打開NIO的門,我沒有很多經驗。

編輯刪除readLong()

您可以使用readFully(byte[] b, int off, int len)然后使用以下方法轉換為Long如何將字節數組轉換為其數值(Java)?

因為java中沒有unsigned int類型? 為什么不readLong() 你可以讀取Long然后取32位。

編輯你可以試試

long value = Long.parseLong(Integer.toHexString(file.readInt()), 16);

根據您使用int ,您可能不需要將其轉換為long。 您只需要知道您正在執行的操作。 在它只有32位后,您可以根據需要將其視為有符號或無符號。

如果你想使用ByteOrder,最簡單的方法是使用ByteBuffer,它允許你設置一個字節順序。 如果文件小於2 GB,則可以將整個文件映射到內存中並隨機訪問ByteBuffer。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM