[英]Reading a file into a byte-array with padding for 8-byte alignment - Java
我需要將文件讀入Java中的字節數組。 幸運的是, 這個問題已經很好地回答了,我能夠使用Java 7中的nio庫。
但是,這是一個變數:生成的字節數組的大小必須是8的倍數。額外的字節應為null,即\\ 0。
是否有一種快速且易讀的方法將字節數組填充為零,以便其大小為8的倍數? 請注意,這里的關鍵是可讀性和開發速度-如果最佳解決方案除了簡單地將文件讀入字節數組外還增加了幾行,我寧願將整個緩沖區復制到新數組中。
編輯:
更多的閱讀內容表明,我可以修改此答案 ,並將緩沖區的大小簡單地舍入到下一個8.對此策略的安全性和/或有效性有何想法? 我相信超出文件末尾的緩沖區中的字節將被初始化為零,並且不受讀取的影響-是正確的嗎?
由於8是2的冪,因此您可以快速獲取下一個數字:
int theSize = (orig + 7) & ~7;
對於直接讀入字節數組,您說您使用了nio; 因此,請從與文件關聯的通道中分配具有請求大小和.read()
的ByteBuffer
(使用FileChannel.open()
)。 然后使用ByteBuffer
的.array()
方法獲取基礎數組。 (注意:請勿.allocateDirect()
!否則.array()
無效)
如果可以將FileChannel.map()
設置為所需大小,那將是理想的選擇,不幸的是,將其映射為更大的大小會修改基礎文件,因此這里沒有骰子。
樣例代碼:
final Path path = Paths.get("path/to/wanted/file");
try (
final FileChannel channel = FileChannel.open(path, StandardOpenOption.READ);
) {
final int bufsize = ((int) channel.size() + 7) & ~7;
final ByteBuffer buf = ByteBuffer.allocate(bufsize);
channel.read(buf);
return buf.array();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.