【转】java读写二进制文件的解决方法
原文网址:http://www.jb51.net/article/36940.htm
接口:Writerable
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
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接口时写的,并没有在项目中使用,也不知道在项目中这样用会不会有什么问题。
【转】java读写二进制文件的解决方法的更多相关文章
- Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法
Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法 java.lang.OutOfMemoryError: Java heap sp ...
- java.lang.ClassNotFoundException的解决方法
java.lang.ClassNotFoundException的解决方法 出现这个问题的原因可能很多,但是最终原因都是部署的项目文件中没有这个类包. 那么出错的点在哪呢?逐一排除! 1.首先在项 ...
- Tomcat部署java项目java.lang.OutOfMemoryError异常解决方法
java.lang.OutOfMemoryError异常解决方法 Window系统环境下,在catalina.bat文件第一行添加以下内容 set JAVA_OPTS=-Xms512m -Xmx512 ...
- 对于jfinal中java.lang.Long cannot be cast to java.lang.Integer的解决方法
@Jfinal 老大提供的解决方法 当数据库字段为 int 型(有符号int型),但是如果在 sql 中使用了某些函数,jdbc 会自动转型为 long,例如:select sum(money) fr ...
- android 工程里缺少 R.java 文件原因和解决方法
作为新手,学习android 的时候难免要导入一些示例,目的为了更加了解android各种API用法,顺便也可以学习下别人代码的写法. 可是导入android源码后,基本都有错误,R.java也不会自 ...
- Java中线程出现Exception in thread "Thread-0" java.lang.IllegalMonitorStateException异常 解决方法
代码 package thread; public class TestChongNeng { public static void main(String[] args) { Thread t1 = ...
- golang中map并发读写问题及解决方法
一.map并发读写问题 如果map由多协程同时读和写就会出现 fatal error:concurrent map read and map write的错误 如下代码很容易就出现map并发读写问题 ...
- (转)Android工程出现 java.lang.NoClassDefFoundError错误解决方法
在Eclipse中,导入Android工程,工程没有报错,运行时,出现 java.lang.NoClassDefFoundError类没有找到的错误.从问题上可以看出是导入包出错的原因.遂百度加谷歌. ...
- Java小问题的解决方法系列
1)IDEA中文乱码,解决方法:http://blog.csdn.net/zht666/article/details/8953516 2)卸载OpenJdk,http://my.oschina.ne ...
随机推荐
- Android ViewFlow的一个例子
完成这个例子的步骤: 1.下载ViewFlow的源码,然后将类ViewFlow放在自己的工程的src的某个包下. 2.下载的源码里有2个工程view flow,viewflow-example.将vi ...
- SAX PULL解析实例
XML三种解析方式: SAX解析:基于事件驱动,事件机制基于回调函数的,得到节点和节点之间内容时也会回调事件 PULL解析:相同基于事件驱动,仅仅只是回调时是常量 DOM解析:是先把XML文件装入内存 ...
- 将activity设置成dialog样式如何设置窗口大小
具体做法和dialog窗口的设置类似,只需要在onCreate方法中,加入下列代码,既可以控制大小! // 设置窗体大小 ScreenUtil.getScreenWidth(LoadActivity ...
- 一个Nodejs的简单计算測试程序
測试目的: 1 測试二维数组的使用 2 输出函数的使用 代码: var util = require('util'); a = 3; b = 4; c = a + b; a = []; for(i = ...
- [转] postgresql常用命令
PS: 数据库安装后,里面的每个数据库有自己的用户密码,需要dump的时候,指定用户pg_dump -U xxx <数据库> > 某个地址 最近一直在学习Postgresql,下面 ...
- HDU 1199 - Color the Ball 离散化
[题意]现在有几个球排成一排,编号从1开始,开始时所有球为黑色,现在有n(<=2000)次操作,每次操作将l[i]至r[i](均在int范围)的球凃成颜色c[i](黑色'b'或白色'w'),然后 ...
- 自定义控件【圆形】圆角 BitmapShader
关于缩放比例 本例中,我们会为BitmapShader设置了一个matrix,目的是按比例放大或者缩小bitmap,并移动到View控件的中心,我们不会让view的宽高大于我们bitm ...
- ssh注解开发
引入需要的jar包 @Entity public class Teacher { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) priva ...
- webform 复杂点的服务器控件
1 , dropdownlist: 下拉框 属性items 列表集合, 里面的每一个元素是一个 listitem . 联动的时候注意要 设置属性 .Autopostback 为ture: 注注 ...
- Oracle 空间管理
表空间:组数据文件的一种途径 分类: 目录表空间(sysaux) 常表空间(system) 系统临时表空间(temp) 用户临时表空间(user) undo表空间 创建表空间: //表空间名为name ...