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 ...
随机推荐
- mysql ERROR 1366
mysql ERROR 1366 mysql> INSERT INTO tb_room VALUES ('9101','9','1',300,'9101',0,1,'超级豪华间','public ...
- windows 10 的开始菜单里面图标右击弹不出选项菜单了
组策略的问题 win + r => gpedit.msc 计算机配置->管理模板>“开始”菜单和任务栏>在“开始”菜单中禁用上下文菜单 改为“已禁用”
- 洛谷P1801 黑匣子
题目传送门 分析:这题和另外一个题目中位数非常相似,有兴趣可以先看看,比这一题简单.首先暴力模拟还是别想了,估计30%的数据都有点悬.正解应该是用二叉堆.但是如果用一个堆当然不方便,所以建两个堆,一个 ...
- html不识别<br/>,后台返回<br/>,前端不换行解决办法
今天编写页面,后台直接返回带有html格式的字符串,包含<br/>,前端以为要展示<br/>,将其解析为<br/>页面不换行 解决办法 后台将<br/> ...
- 洛谷——P1104 生日
P1104 生日 题目描述 cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序.但cjf君最近作业很多,没有时间,所以请你帮她排序. 输入输出格式 输入格式: 有2行, 第1行为OI组总 ...
- Linux基础系列-Day7
NFS服务(基于CentOS 7.0) NFS(Network File System),网络文件系统,是linux与linux之间进行文件共享的服务,在NFS应用,本地NFS的客户端可以透明地读写位 ...
- 【POJ】1089Intervals
Intervals Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8276 Accepted: 3270 Descrip ...
- BZOJ 4059 [Cerc2012]Non-boring sequences(启发式分治)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4059 [题目大意] 一个序列被称为是不无聊的,仅当它的每个连续子序列存在一个独一无二的 ...
- 1.3(SQL学习笔记)计算字段及函数
一.计算字段 1.1拼接字段 一般情况下返回的字段是指定列的属性名.如果有时我们对返回格式有特殊要求. 例如,我们需要将显示商品名,即商品价格,同时商品名后面的价格放在括号内. prod_name(p ...
- [转]详细解析Java中抽象类和接口的区别
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...