Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图从SEGY(地震数据)读取二进制文件头。不会产生正确的整数_Java_Binary - Fatal编程技术网

Java 试图从SEGY(地震数据)读取二进制文件头。不会产生正确的整数

Java 试图从SEGY(地震数据)读取二进制文件头。不会产生正确的整数,java,binary,Java,Binary,SEGY文件格式是存储地震数据的标准格式。它有一个3600字节的报头,其中第一个3200字节是文本报头,其余400字节是二进制报头 我想从这个.sgy文件中读取包含我需要的重要信息的整数。例如,我想读取字节号3217-3218以检索采样率,即这些特定的2个字节分配给采样率 类似地,字节3221-3222读取“样本数”。我有以下代码。它不会产生正确的整数 该程序应显示以下结果文件len为993204,采样率为2,样本数为501,而不是打印文件len为993204,采样率为53248和 样本数量为6

SEGY文件格式是存储地震数据的标准格式。它有一个3600字节的报头,其中第一个3200字节是文本报头,其余400字节是二进制报头

我想从这个.sgy文件中读取包含我需要的重要信息的整数。例如,我想读取字节号3217-3218以检索采样率,即这些特定的2个字节分配给采样率

类似地,字节3221-3222读取“样本数”。我有以下代码。它不会产生正确的整数

该程序应显示以下结果文件len为993204,采样率为2,样本数为501,而不是打印文件len为993204,采样率为53248和 样本数量为62720

File file = new File("C:\\mysample.sgy");
FileInputStream fileInputStream = null;
byte[] bFile = new byte[(int) file.length()];    
System.out.println("file len="+file.length());
try
{
//convert file into array of bytes
fileInputStream = new FileInputStream(file);
fileInputStream.read(bFile);
fileInputStream.close();
int sampleRate = (((bFile[3217] & 0xff )<<8)|(bFile[3218] & 0xff));          
System.out.println("Sample Rate="+sampleRate);
int noOfSamples = (((bFile[3221] & 0xff )<<8)|(bFile[3222] & 0xff));             
System.out.println("No Of Samples="+noOfSamples);
}
catch (Exception e)
{
e.printStackTrace();
}
File File=new文件(“C:\\mysample.sgy”);
FileInputStream FileInputStream=null;
byte[]bFile=新字节[(int)file.length()];
System.out.println(“file len=“+file.length());
尝试
{
//将文件转换为字节数组
fileInputStream=新的fileInputStream(文件);
fileInputStream.read(bFile);
fileInputStream.close();

int sampleRate=((bFile[3217]&0xff)问题(可能)是SEGY格式。这些值本身保存为
float 4 ibm
浮点数。这本质上意味着,当您以字节为单位读取时,必须非常小心内存中的和。此外,我相信您的偏移量为一个字节。:您的变量
sampleRate
保存为
SEGY short
格式(也在链接中单独描述)偏移量为3218/3219,而您的
nSamples
格式为
segy short
格式,偏移量为3220/3221。非常感谢您的回复!根据3217-3218=采样间隔。我读取的是完全相同的字节,但我应该读取3216-3217,因为它们存储在java数组中!现在开始工作!\n问题(可能)是SEGY格式。这些值本身保存为
float 4 ibm
浮点数。这本质上意味着,当您以字节为单位读取时,必须非常小心内存中的和。此外,我相信您的偏移量为一个字节。:您的变量
sampleRate
保存为
SEGY short
格式(也在链接中单独描述)偏移量为3218/3219,偏移量为3220/3221时,您的
nSamples
格式为
segy short
格式。非常感谢您的回复!根据3217-3218=采样间隔。我读取的字节完全相同,但我应该读取3216-3217,因为它们存储在java数组中!现在可以工作了\