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

时间: 2024-10-14 03:56:13

Java读写二进制文件示例的相关文章

Java读写二进制文件操作

/**  * 二进制读写文件  */ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; public class MainClass { /**

Java 读写文件示例

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class Test4 { public static void main(String[] args) { FileUtil f = new FileUtil(); System.out.println(f.read("c:/a.txt")); final String fileName = &quo

【转】java读写二进制文件的解决方法

原文网址:http://www.jb51.net/article/36940.htm 接口:Writerable 复制代码代码如下: package com.geoway.pad.common; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; public interface Writerable {        //write         public void  write

android 读写文件示例

(1)程序说明 代码中的两个按钮处理事件,分别进行了文本的读写操作. 1)文件写操作 首先调用Activity的openFileOutPut()方法获得文本文件的输出流,第一个参数为文本文件的名字,第二个为文件的打开方式 接着调用Outputstream对象的write()方法将Textview中获得文本信息写入outputstream对象,最后调用close()方法完成写入操作. 2)文件读操作 首先调用Activity的openFileInPut()方法获得文本文件的输入流, 接着调用输入流

【转】C++读写二进制文件

原文网址:http://blog.csdn.net/lightlater/article/details/6364931 摘要: 使用C++读写二进制文件,在开发中操作的比较频繁,今天有幸找到一篇文章,遂进行了一些试验,并进行了部分的总结. 使用C++操作文件,是研发过程中比较频繁的,因此进行必要的总结和封装还是十分有用的.今天在网上找到一篇,遂进行了部分的试验,以记之,备后用. 本文读写文件均使用文件流进行操作,主要使用的类是ifstream, ofstream, 使用时,请务必包含文件fst

java读写文件

读文件 package tool; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; public class ReadFile { pu

Java 读写Properties配置文件

Java 读写Properties配置文件 1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集.不过Properties有特殊的地方,就是它的键和值都是字符串类型. 2.Properties中的主要方法 (1)load(InputStream inStream)   这个方法可以从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象.如下面的代码

C/C++读写二进制文件

C++读写二进制文件 最近在给android层提供支持,因此代码都是用标准库库函数写出来的,好多windows和第三方的库不能或者很难使用,下面有我在读写二进制文件时候的一些心得,也算是一种总结吧 1.读二进制信息 1 bool bRet = true; 2 std::ofstream fout(szDestFile, std::ios::binary | std::ios::app); 3 std::ifstream fin(szOrigFile, std::ios::binary); 4 5

Java读写Windows共享文件夹 .

版权声明:本文为博主原创文章,未经博主允许不得转载. 项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片.文件等.那么如何使用Java读写Windows共享文件夹呢? Java可以使用JCIFS框架对Windows共享文件夹进行读写,就这个框架可以让我们像访问本地文件夹一下访问远程文件夹. JCIFS的网址: http://jcifs.samba.org/ JCIFS是使用纯Java开发的一个开源框架,通过smb协议访问远程文件夹.该框架同时支持Windows共享文件夹和Linux共享文