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 ...
随机推荐
- 【剑指offer】面试题 64. 求 1+2+3+...+n
面试题 64. 求 1+2+3+...+n 题目:求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 1.采 ...
- 开源地图编辑器 MarbleMap,支持Cocos2d-x坐标系
由9秒社团开发并维护的MarbleMap是支持Cocos2d-x坐标系和as3坐标系的地图编辑器,功能完善高效.这里详细介绍一下它的使用方法! 一.功能简述 由9秒社团开发并维护的MarbleMap是 ...
- 转型(java)(.net)
/** * 父类 */ class Animal { public void eat() { //输出 父类吃.... } } class Bird extends Animal { public v ...
- JavaScript中思考do...while 和 while语句的区别
Do...while和while...do的区别在于对于临界值的测试上.当在执行的时候只选择临界值来测试时,你会发现do...while至少要执行一次,而while...do则一次都不会执行.但是,当 ...
- linux 服务器之间文件传送
linux 服务器之间文件传送免密码输入传递: expect -c " set timeout 10 spawn scp ××××××.tar.bz2 root@172.16.17.34:/ ...
- python基础day4
1.列表生成式,迭代器&生成器 列表生成式 将列表[0,1,2,3,4,5,6,7,8]中的每个值加1,如何实现?常用的几种方法 方法一: a=[0,1,2,3,4,5,6,7,8] for ...
- [Codeforces #196] Tutorial
Link: Codeforces #196 传送门 A: 枚举 #include <bits/stdc++.h> using namespace std; #define X first ...
- [Arc080F]Prime Flip
[Arc080F]Prime Flip Description 你有无限多的"给给全",编号为1,2,3,....开始时,第x1,x2,...,xN个"给给全" ...
- 【bfs+优先队列】POJ2049-Finding Nemo
基本上算是普通但略有些繁琐的广搜.给出的墙面和门的坐标为点,而Nemo位于方格中. [思路] 首先思考一下如何存储下整个坐标系.我们预先约定,用一个方格的左下角顶点坐标来作为这个方格的坐标.map[i ...
- 1.5 (SQL学习笔记)事务处理
一.事务 1.1事务概念 事务处理可以用来维护数据库系统数据的完整性,它保证一组SQL语句要么全部都执行, 要么全部都不执行.(例如一批SQL语句,只要有一个执行失败就全部不执行,即回到失败前的状态 ...