gpt4 book ai didi

java - 如何读取二进制文件中的整数和日期

转载 作者:行者123 更新时间:2023-12-02 07:41:13 25 4
gpt4 key购买 nike

我有一个二进制记录文件。每条记录的格式如下:每条记录由两个整数组成,车辆数量和涉及人员数量; float 、严重性代码;和一个包含事故日期的字符串。该日期采用以下形式:三个字母的月份缩写,后跟一个空格,然后是该月的某一天,后跟一个逗号,最后是可以用两位数或四位数字表示的年份。

以下是代码。但我没有得到正确的答案..

我的代码:

import java.io.*;

public class BoydBAssignment5_Ver1 {

public static void main(String s[]) {
DataInputStream input1; //you need these two variable for a file
File infile1;
input1 = null;

BoydBAssignment5_Ver1 tfr; //this is your program object
tfr = new BoydBAssignment5_Ver1();
try{ //try for open
infile1 = new File("assign5.data");
input1 = new DataInputStream(new FileInputStream(infile1));
} catch (IOException i){
i.printStackTrace();}

tfr.read_records(input1);
try { //try for close
input1.close();
} catch (IOException i) {
System.out.println("error in close");
}
}

private void read_records(DataInputStream is2) {
int totalVehicles=0,totalPersons=0;
int numVehicles;
int numPeople;
char ch;

try { //try for read
while(true) {
numVehicles=is2.readInt();
if(numVehicles==0)
break;

totalVehicles+=numVehicles;
System.out.print("\n"+numVehicles+"\t");
numPeople=is2.readInt();
if(numPeople==0)
break;

totalPersons+=numPeople;
System.out.print(numPeople+"\t");
System.out.print(is2.readDouble()+"\t");
/*System.out.print(is2.readLine()+"\n");
for(int k=0;k<4;k++)
{
is2.readByte();
}*/
while((ch=(char)is2.readByte()) != 0x00) {
System.out.print(ch+"");
}
}

System.out.println("\nTotal no of vehicles:"+totalVehicles);
System.out.println("Total no of Persons:"+totalPersons);
write_in_file(totalVehicles,totalPersons);
} catch (IOException i) {
System.out.println("error in write");
}

}

private void write_in_file(int totalVehicles, int totalPersons) {
try {
FileWriter fstream = new FileWriter("finalOutput.data");
BufferedWriter out = new BufferedWriter(fstream);
out.write("Number of vehicles involved"+"\t"+totalVehicles);
out.write("\nNumber of persons involved"+"\t"+totalPersons);
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}

}

输出::

148308 1 4.774904982E-314
189429102 540161068 1.4275957977117199E-71
512 576 6.903600071305329E-93 8,98 37966848 512 1.7668797952966E-311
Mar 4,2006 37966848 256 2.8513257442947E-311
Apr 8,2011 38683904 512 2.3101107177838E-311 Jun 14,06 38683904 256 6.792508527386E-312 Apr 22,2005 38683904 256 1.2216329768334E-311 Oct 1,04 38683904 768 2.3099515681247E-311 Jul 9,83 38813952 256 6.802588006634E-312 Aug 4. 1998 38813952 512 6.802588006634E-312 Jun 14, 2011 38813952 512 1.7667206456376E-311 Sep 8, 99 39344128
Total no of vehicles:576033218 Total no of Persons:540165485

请帮助我..提前致谢!!

最佳答案

据猜测,您的数据存储为小端。 DataInputStream 是大端字节序。 (如果您不确定什么字节顺序,请参阅 http://en.wikipedia.org/wiki/Endianness )

最简单的方法是将文件读入单个直接ByteBuffer,它允许您设置字节顺序。

关于java - 如何读取二进制文件中的整数和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11555262/

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