C ++中有一些代码如下:
struct Chunk
{
int flag;
int size;
};
Chunk chunk;
chunk.flag = 'DIVA';
chunk.size = 512;
然后写入文件(fp是文件的指针):
fwrite(&chunk, sizeof(chunk), 1, fp);
在Java中,要读取块,我需要这样做
// Read file
byte[] fileBytes = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(fileBytes);
fis.close();
byte[] flag = new byte[4];
byte[] size = new byte[4];
//LITTLE_ENDIAN : reverse it
System.arraycopy(fileBytes, 0, flag, 0, flag.length);
System.arraycopy(fileBytes, flag.length, size, 0, size.length);
ArrayUtils.reverse(flag);
ArrayUtils.reverse(size);
然后,检查结果
if(Arrays.equals(flag, "DIVA".getBytes()))
{
// do sth.
}
或者在java中这样做('Bytes.toInt'来自HBase)
int flag;
int size;
flag = ByteBuffer.wrap(inBytes, startPos, 4).order(ByteOrder.LITTLE_ENDIAN).getInt();
size = ByteBuffer.wrap(inBytes, startPos + 4, 4).order(ByteOrder.LITTLE_ENDIAN).getInt();
然后执行此操作以检查此结果
if(flag == Bytes.toInt("DIVA".getBytes()))
{
// do sth.
}
我希望我已经清楚地表达了自己。 :)
我的问题是上面两种方式,哪种更好?或者有更好的方法吗?
更重要的是,Chunk被用作文件的头部。