gpt4 book ai didi

Java,在二进制文件输入中搜索 long,8 字节对齐,大端

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:08 25 4
gpt4 key购买 nike

public static void main(String[] args) {
File inFile = null;
if (0 < args.length) {
inFile = new File(args[0]);
}
BufferedInputStream bStream = null;
try {
int read;
bStream = new BufferedInputStream(new FileInputStream(inFile));
while ((read = bStream.read()) > 0) {
getMarker(read, bStream);
System.out.println(read);
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
if (bStream != null)bStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}

private static void getMarker(int read, BufferedInputStream bStream) {
}

我想在bufferedInputStream中找到long 1234567890。我可以在 bufferedInputStream 中搜索 long 类型吗? (我不确定我是否需要“读取”作为参数。我对此表示怀疑,我可能会删除它)。如何搜索 bufferedInputStream?大端,8 字节对齐。

我正在搜索的初始标记包含值 1234567890。找到该值后,我想将 2 个字节的值放入一个变量中。这 2 个字节位于标记之后的 11 个字节处。

最佳答案

使用方法 java.io.DataInputStream.readLong() 可以每 8 个字节读取 8 个字节的数据。但问题是:文件只包含长数据还是其他数据?

如果数据可能在任何地方,我们必须从偏移量 0、1、2 等开始读取文件的 8 次。

class FuzzyReaderHelper {

public static final long MAGIC_NUMBER = 1234567890L;

public static DataInputStream getStream( File source ) {
boolean magicNumberFound = false;
for( int offset = 0; !magicNumberFound && offset < 8; ++offset ) {
dis = new DataInputStream( new FileInputStream( source ));
for( int i = 0; i < offset; ++i ) {
dis.read();
}
try {
long l;
while(( l = dis.readLong()) != MAGIC_NUMBER ) {
/* Nothing to do... */
}
magicNumberFound = true;
for( int i = 0; i < 11; ++i ) {
dis.read();
}
return dis;
}
catch( EOFException eof ){}
dis.close();
}
// choose:
throw new IllegalStateException( "Incompatible file: " + source );
// or
return null;
}
}

接下来的步骤由您决定:

DataInputStream dis = FuzzyReaderHelper.getStream( new File( root, "toto.dat" ));
if( dis != null ) {
byte[] bytes = new byte[2];
bytes[0] = dis.read();
bytes[1] = dis.read();
...
}

关于Java,在二进制文件输入中搜索 long,8 字节对齐,大端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16902402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com