接口: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接口時寫的 並沒有在項目中使用 也不知道在項目中這樣用 會不會有什么問題。