java读写二进制文件

接口: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(DataOutput data) throws IOException;
       //read
       public  void read(DataInput di) throws IOException;
}

 接口实现类:UserWriter

package com.geoway.pad.common;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;

public class UserWriter implements Writerable{
	//getter  setter  methods
	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public boolean isAdministrator() {
		return administrator;
	}
	public void setAdministrator(boolean administrator) {
		this.administrator = administrator;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getPassword() {
		return password;
	}
	public void setText(String text) {
		this.text = text;
	}
	public String getText() {
		return text;
	}
	public void setImage(byte[] image) {
		this.image = image;
	}
	public byte[] getImage() {
		return image;
	};
	//private  fields
	 private int number;
	 private String id;
	 private int age;
	 private boolean administrator;
     private  String userName;
     private  String password;
     private  String text;
     private  byte[]  image;

	@Override
	public void write(DataOutput data) throws IOException {
       data.writeInt(number);
       data.writeUTF(id);
       data.writeInt(age);
       data.writeBoolean(administrator);
       data.writeUTF(userName);
       data.writeUTF(password);
       data.writeUTF(text);
       data.write(image);
		
	}
	@Override
	public void read(DataInput di) throws IOException {
       this.number=di.readInt();
       this.id=di.readUTF();
       this.age=di.readInt();
       this.administrator=di.readBoolean();
       this.userName=di.readUTF();
       this.password=di.readUTF();
       this.text=di.readUTF();
       //读取图片
       this.image=new byte[2048];
       try{
         di.readFully(this.image);
       }catch(Exception e){
    	   System.out.println(e.toString());
       }
	}
  public static byte[] in2byte(InputStream is) throws IOException{  
	 byte[] bs= new byte[1024];  
     ByteArrayOutputStream bos = new ByteArrayOutputStream();  
     int len = -1;  
	 while((len=is.read(bs))!=-1){  
		 bos.write(bs,0,len);  
     }  
	 bs = bos.toByteArray() ;  
     return bs ;  
   }  
   public static  void copy(InputStream in, OutputStream out) throws IOException {  
       byte[] buf = new byte[1024];  
	   while (true) {  
	            int len = in.read(buf);  
		           if (len < 0) break;  
		  out.write(buf, 0, len);  
	      }  
  }  
 public  static  void main(String[] args) throws FileNotFoundException, IOException{
		UserWriter user=new UserWriter();
		user.setUserName("likehua");
		user.setPassword("password");
		user.setId(UUID.randomUUID().toString());
		user.setNumber(123);
		user.setAdministrator(false);
		//加一段文字
		user.setText("做一个天气预报,可以保存要显示的城市名称 在增加城市页面,我的rms关键操作如下(其中SetCanvas.cityName是一个Vector,用来保存城市名,在执行此段代码之前,我已经把新增加的城市名添加进了这个Vector ");
        //传入一张图片
        user.setImage(in2byte(new FileInputStream("c:\\1.jpg")));
		user.write(new DataOutputStream(new FileOutputStream("c:\\user.data")));
		System.out.println("完毕");		
		System.out.println("....读取开始...");
		UserWriter u=new UserWriter();
		u.read(new DataInputStream(new FileInputStream("c:\\user.data")));
		System.out.println(u.getUserName());
		System.out.println(u.getPassword());
		System.out.println(u.isAdministrator());
		System.out.println(u.getText());
		//拿出图片
		copy(new ByteArrayInputStream(u.getImage()), new FileOutputStream("c:\\copy.jpg"));

	}
	
}

 本例  只是本人测试DataOutput和DataInput接口时写的   并没有在项目中使用   也不知道在项目中这样用 会不会有什么问题。

 

 

posted @ 2012-06-21 17:52  李克华  阅读(10131)  评论(0编辑  收藏  举报