Java读写二进制文件示例
相对于文本文件,二进制文件读写快,定位快而准,下面是代码示例:
import java.io.DataInput;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;
class Employee{
    public static int RecordSize=72;// 总计8+30*2+4=72字节,算准总字节数对于连续读取很重要
    private long id;// long类型似占8字节
    private String name;
    public static int NameSize=30;// 预计名称最多30个字符,占30*2=60字节
    private int age;// int类型占4字节
    public Employee(long id,String name,int age){
        this.id=id;
        this.name=name;
        this.age=age;
    }
    public String toString(){
        return "ID="+id+" name:"+name+" age:"+age;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
public class Test3{
    public static void main(String[] args) throws Exception{
        // 准备数据
        List<Employee> ls=new ArrayList<Employee>();
        final int AMOUT=10;
        for(long i=0;i<AMOUT;i++){
            ls.add(new Employee(i,"克隆人-"+i,(int)(i %100)));
        }
        // 写入
        DataOutputStream out=new DataOutputStream(new FileOutputStream("C:\\Users\\IBM_ADMIN\\Desktop\\emp.dat"));
        for(Employee emp:ls){
            writeEmp(out,emp);
        }
        // 挨个读取
        RandomAccessFile in=new RandomAccessFile("C:\\Users\\IBM_ADMIN\\Desktop\\emp.dat","r");
        int len=(int)(in.length()/Employee.RecordSize);
        for(long i=0;i<len;i++){
            in.seek(i*Employee.RecordSize);
            Employee emp=readEmp(in);
            System.out.println(emp.toString());
        }
    }
    private static void writeEmp(DataOutput out,Employee emp) throws Exception{
        writeString(emp.getName(),Employee.NameSize,out);
        out.writeLong(emp.getId());
        out.writeInt(emp.getAge());
    }
    private static Employee readEmp(DataInput in)  throws Exception{
        String name=readString(Employee.NameSize,in);
        long sn=in.readLong();
        int age=in.readInt();
        return new Employee(sn,name,age);
    }
    // 写入最大长度为size的字符串,不足写0
    private static void writeString(String str,int size,DataOutput out) throws Exception{
        for(int i=0;i<size;i++){
            char c=0;
            if(i<str.length()){
                c=str.charAt(i);
            }
            out.writeChar(c);
        }
    }
    // 读入最大长度为size的字符串
    private static String readString(int size,DataInput in) throws Exception{
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<size;i++){
            char c=in.readChar();
            if(c==0){
                continue;
            }else{
                sb.append(c);
            }
        }
        return sb.toString();
    }
}
输出如下:
ID=0 name:克隆人-0 age:0 ID=1 name:克隆人-1 age:1 ID=2 name:克隆人-2 age:2 ID=3 name:克隆人-3 age:3 ID=4 name:克隆人-4 age:4 ID=5 name:克隆人-5 age:5 ID=6 name:克隆人-6 age:6 ID=7 name:克隆人-7 age:7 ID=8 name:克隆人-8 age:8 ID=9 name:克隆人-9 age:9
Java读写二进制文件示例的更多相关文章
- Java 读写文件示例
		
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class T ...
 - 【转】JAVA 读写二进制文件
		
原文网址:http://shiminghua234.blog.163.com/blog/static/263912422011619102350866 import java.io.*; /** * ...
 - 【转】java读写二进制文件的解决方法
		
原文网址:http://www.jb51.net/article/36940.htm 接口:Writerable 复制代码代码如下: package com.geoway.pad.common; im ...
 - Java读写文件方法总结
		
Java读写文件方法总结 Java的读写文件方法在工作中相信有很多的用处的,本人在之前包括现在都在使用Java的读写文件方法来处理数据方面的输入输出,确实很方便.奈何我的记性实在是叫人着急,很多时候既 ...
 - java读写文件大全
		
java读写文件大全 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类,这两个类都是抽象类,Writer中 write(char[] ch,int o ...
 - 【转】C++读写二进制文件
		
原文网址:http://blog.csdn.net/lightlater/article/details/6364931 摘要: 使用C++读写二进制文件,在开发中操作的比较频繁,今天有幸找到一篇文章 ...
 - GeoJson的生成与解析,JSON解析,Java读写geojson,geotools读取shp文件,Geotools中Geometry对象与GeoJson的相互转换
		
GeoJson的生成与解析 一.wkt格式的geometry转成json格式 二.json格式转wkt格式 三.json格式的数据进行解析 四.Java读写geojson 五.geotools读取sh ...
 - Java读写文本文件操作
		
package com.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; ...
 - java 读写word java 动态写入 模板文件
		
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import ja ...
 
随机推荐
- LR脚本用户自定义C语言函数
			
LR脚本实战:用户自定义C语言函数 Loadrunner可以使用标准C语言的函数,因此我们可以在脚本中编写自己的函数用于调用,把脚本结构化,更好的进行重用. 先看一个例子: Action() { in ...
 - Calendar类进行日期操作
			
import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * 测试日期类 * ...
 - 17-7-24-react入门
			
先说明下为什么说好每天一更,周五周六周日都没有更新.因为在周五的时候,上司主动找我谈了转正后的工资4-4.5K.本来想好是6K的,后来打听了一圈公司的小伙伴,都是5-5.5,我就把自己定到了5K.万万 ...
 - HRBUST 1313 火影忍者之~静音
			
优先队列. 每次将$n$个人压入优先队列,取出$5$个,最后排序. #include<cstdio> #include<cstring> #include<cmath&g ...
 - 【读书笔记】周志华《机器学习》第三版课后习题讨<第一章-绪论>
			
虽然是绪论..但是...真的有点难!不管怎么说,一点点前进吧... 声明一下答案不一定正确,仅供参考,为本人的作答,希望大神们能多多指教~ 1.1 表1.1中若只包含编号为1和4的两个样例,试给出相应 ...
 - C++中template的.h文件和.cpp文件的问题
			
在C++中,用到类模板时,如果类似一般的类声明定义一样,把类声明放在.h文件中,而具体的函数定义放在.cpp文件中的话,会发现编译器会报错.如类似下面代码: //test.h文件 #ifndef TE ...
 - Redux 中间件的执行顺序理解
			
Redux.applyMiddleware(thunk, middleware1) 和 Redux.applyMiddleware(middleware1, thunk) 的区别: <!DOCT ...
 - nginx和php-fpm的用户权限
			
启动php-fpm sudo php-fpm -c /etc/php.ini [17-Sep-2018 00:36:59] ERROR: [pool www] please specify user ...
 - [转]java框架spring中的opensessioninview有什么作用
			
在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时 session已关闭,所以就会出现异常. 比较典型的是在MV ...
 - Windows使用OpenVPN客户端连接
			
前提: 1.上官网下载Windows客户端:https://openvpn.net/index.php/open-source/downloads.html 安装: 1.默认安装,选择easy-rsa ...