java读写二进制文件的解决方法_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接口时写的,并没有在项目中使用,也不知道在项目中这样用会不会有什么问题。

时间: 2024-09-15 16:25:16

java读写二进制文件的解决方法_java的相关文章

Eclipse不自动编译java文件的终极解决方法_java

最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般是如下几个步骤.但是还是不自动编译. 最基本的解决办法--这是前提   然后clean和refresh下项目.如果这样还是不行,用下面的方法吧,终极解决方案...... 1:去除项目中的jre的classpath       2:在将jre的包添加到classpath中来   OK,大功告成!再出现

Exception in thread main java.lang.NoClassDefFoundError错误解决方法_java

错误描述 javac helloworld.java能够通过.但是java helloworld出现错误: hadoop@xuwei-erplab:~/jarfile$ java HelloWorld Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/xuwei/HelloWorld) at java.lang.ClassLoader.defineClass1(N

关于java 图形验证码的解决方法_java

复制代码 代码如下: package cn.response; import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random; import javax.imageio.ImageIO;import

5种解决Java独占写文件的方法_java

本文实例讲解了5种解决Java独占写文件的方法,包含自己的一些理解,如若有不妥的地方欢迎大家提出. 方案1:利用RandomAccessFile的文件操作选项s,s即表示同步锁方式写 RandomAccessFile file = new RandomAccessFile(file, "rws"); 方案2:利用FileChannel的文件锁 File file = new File("test.txt"); FileInputStream fis = new Fi

Java读写Cookie记录的方法

  本文实例讲述了Java读写Cookie记录的方法.分享给大家供大家参考.具体如下: 写Cookie ,cookie的value可以使String, list , map,int : ? 1 2 3 4 5 6 7 Cookie usernameCookie = new Cookie("username_" + schoolId, encodedUsername); usernameCookie.setMaxAge(60 * 60 * 24 * 365); response.addC

Win7系统打开网页提示应用程序已被JAVA安全阻止的解决方法

具体方法如下: 1.完成JAVA版本更新,然后刷新有问题的网页页面,以排除JAVA版本问题引起JAVA安全阻止: 2.从开始菜单中打开控制面板,我们需要进入控制面板来修改相应的配置: 3.进入控制面板后,在控制面板中找到JAVA选项,如果找不到可将查看方式切换到大图标或图标即可; 4.在JAVA控制面板中打开安全选项,并找到例外站点列表; 5.打开JAVA控制面板中编辑例外站点列表,将我们需要在网页上运行JAVA脚本的站点添加到此列表中; 6.将需要运行JAVA脚本的站点添加至其中,并对弹出的安

java使用sigar 遇到问题的快速解决方法_java

先给大家介绍一个开源工具Sigar 官网:http://sigar.hyperic.com/ API: http://www.hyperic.com/support/docs/sigar/index-all.html(由于是英文的,英文不好的可以用谷歌浏览器的翻译功能,直接转换为简体中文进行阅读) Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,由C语言实现的.可以收集的信息包括: 1 CPU信

java使用Jsoup连接网站超时的解决方法_java

今天做了一个Jsoup解析网站的项目,使用Jsoup.connect(url).get()连接某网站时偶尔会出现java.net.SocketTimeoutException:Read timed out异常.原因是默认的Socket的延时比较短,而有些网站的响应速度比较慢,所以会发生超时的情况. 解决方法: 链接的时候设定超时时间即可.doc = Jsoup.connect(url).timeout(5000).get();5000表示延时时间设置为5s. 测试代码如下:1,不设定timeou

解决Java J2EE乱码问题的方法_java

乱码是j2ee中一个比较常见的问题.遇到一两个问题的情况下,可以用new String(request.getParameter(xxx).getBytes("ISO-8859-1"),"UTF-8")来解决.遇到多的情况下,就最好用过滤器. 过滤器只需要注意2个地方即可--类和web.xml 1.在web.xml上面的发布如下: <fileter> <!-- 类名 --> <filter-name>SetCharsetEncod