如何读取二进制文件整数和日期 [英] How to read integers and date in binary file

查看:137
本文介绍了如何读取二进制文件整数和日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的记录的二进制文件。每个记录的格式如下:
每个记录包含两个整数,车辆和涉及的人数的数量;一个浮点数,严重code;并且包含事故发生之日起的字符串。该日期的格式如下:三个字母月份缩写后跟一个空格,然后是一个月后跟一个逗号的一天,终于在今年可能重新由两位或四位数字psented $ P $

I have a binary file of records. Each record is of the following format: Each record consists of two integers, number of vehicles and number of persons involved; a floating point number, severity code; and a string which contains the date of the accident. This date takes the following form: a three letter month abbreviation followed by a space, then a day of the month followed by a comma, and finally the year which may be represented by a two digit or four digit number.

以下是code.But我没有得到正确的答案。

Following is the code.But I am not getting the proper answer..

我的code:

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结果
  三月4,2006
  37966848 256 2.8513257442947E-311结果
  四月8,2011
  38683904 512 2.3101107177838E-311军14,06
  38683904 256 6.792508527386E-312四月22,2005
  38683904 256 1.2216329768334E-311月1,04
  38683904 768 2.3099515681247E-311七月9,83
  38813952 256 6.802588006634E-312 4月1998年
  38813952 512 6.802588006634E-312 2011年6月14日
  38813952 512 1.7667206456376E-311 99年9月8日
  39344128结果
  车辆总号:576033218
  人总号:540165485

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

请帮忙提前me..Thanks !!

Please help me..Thanks in advance!!

推荐答案

通过猜测是,你的数据存储为小端。 DataInputStream以是大端。 (如果你不知道什么是字节顺序看 http://en.wikipedia.org/wiki/Endianness

By guess is that you data is store as little-endian. DataInputStream is big-endian. (If you are not sure what endianness is see http://en.wikipedia.org/wiki/Endianness)

做最简单的事情是把文件读入一个单一的直接的ByteBuffer ,它允许您设置的字节顺序。

The simplest thing to do is to read the file into a single direct ByteBuffer which allows you to set the byte order.

这篇关于如何读取二进制文件整数和日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆