java--字节数组输入、输出流
在java网络编程中,字节数组很重要,它可以传输任何资料(文本,音频,视频,图片等),因此掌握字节数组和其它数据类型的相互转化尤为重要。
示例代码:
package com.lky.util; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import com.lky.model.Student; /**
* @ClassName: objectToByteArray
* @Description: 字节数组工具类
* @author lky
* @date 2015年10月26日
* @vesion 1.0
*/
public class objectToByteArray { private static Log log = LogFactory.getLog(objectToByteArray.class);
private static Integer MAX_LENGTH = 2048;// 每次从流中读入多少字节 /**
* @Title: getByteArray
* @Description: 从输入流中读取数据,并返回字节数组
* @param in 输入流
*/
public static byte[] getByteArray(InputStream in) {
ByteArrayOutputStream baos = new ByteArrayOutputStream(); try {
byte[] buffer = new byte[MAX_LENGTH];
int len = 0; while ((len = in.read(buffer, 0, buffer.length)) != -1) {
baos.write(buffer, 0, len);
baos.flush();
buffer = new byte[MAX_LENGTH];
} } catch (Exception e) { } finally {
try {
if (in != null) {
in.close();
}
if (baos != null) {
baos.close();
}
} catch (Exception e2) {
log.info("字节流关闭异常!!!");
}
}
return baos.toByteArray();
} /**
* @Title: ObjectToByte
* @Description: 将对象转化为字节数组
* @param object
*/
public static byte[] ObjectToByte(Object object) {
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null; try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos); oos.writeObject(object);
oos.flush(); } catch (Exception e) {
log.info("object转化为byte数组异常!!!");
} finally {
try {
if (oos != null) {
oos.close();
}
if (baos != null) {
baos.close();
}
} catch (Exception e2) {
log.info("字节流关闭异常!!!");
}
}
return baos.toByteArray();
} /**
* @Title: byteArrayToObject
* @Description: 将字节数组转化为对象
* @param buffer
*/
public static Object byteArrayToObject(byte[] buffer) {
Object object = null;
ByteArrayInputStream bais = null;
ObjectInputStream oss = null; try {
bais = new ByteArrayInputStream(buffer);
oss = new ObjectInputStream(bais); object = oss.readObject(); } catch (Exception e) {
log.info("object转化为byte数组异常!!!");
} finally {
try {
if (oss != null) {
oss.close();
}
if (bais != null) {
bais.close();
}
} catch (Exception e2) {
log.info("字节流关闭异常!!!");
}
}
return object;
} public static void main(String args[]){
Student student=new Student();
student.setId(1);
student.setLog("log");
student.setName("lky");
System.out.println(student); byte[] buffer=ObjectToByte(student); System.out.println(buffer.length);
System.out.println((Student)byteArrayToObject(buffer)); }
}
java--字节数组输入、输出流的更多相关文章
- Java知多少(69)面向字节的输入输出流
字节流以字节为传输单位,用来读写8位的数据,除了能够处理纯文本文件之外,还能用来处理二进制文件的数据.InputStream类和OutputStream类是所有字节流的父类. InputStream类 ...
- 第27章 java I/O输入输出流
java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...
- Java复习7.输入输出流
Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...
- 八. 输入输出(IO)操作4.面向字节的输入输出流
字节流以字节为传输单位,用来读写8位的数据,除了能够处理纯文本文件之外,还能用来处理二进制文件的数据.InputStream类和OutputStream类是所有字节流的父类. InputStream类 ...
- java中基本输入输出流的解释(flush方法的使用)
转自:http://fsz521job.itpub.net/post/5606/34827 网络程序的很大一部分是简单的输入输出,即从一个系统向另一个系统移动字节.字节就是字节,在很大程度上,读服务器 ...
- Java I/O输入输出流详解
一.文件的编码 开发时一定要注意项目默认的编码!!!!!!!! 文件操作的时候一定要记得关闭!!!!!!!! ASCII:美国标准 ...
- Java IO学习--输入输出流
一.Java IO的定义 I/O:输入输出系统,由输入输出控制系统和外围设备两部分组成. Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输 ...
- Java工具类-输入输出流
输入输出流 1.概念 输入输出流:文件复制,上传 输出流: System.out.println() 写操作,程序将字符流写入到"目的地",比如打印机和文件等 输入流 :Scann ...
- Java I/O输入输出流
IO流的复习总结 ------注:蓝色背景段落是例子:红色背景的字段IO流的功能类. 编码问题 String s = "威力锅ABC"; //utf-8编码中文占用三个字节,英文 ...
- Java的IO输入输出流类的介绍(有图)
一.字节流 1.InputStream/OutputStream(输入流与输出流几乎一一对应) 读取的方法 int read() int read(byte[] buffer) int r ...
随机推荐
- [转] 强大的python字符串解析
1.python字符串通常有单引号('...').双引号("...").三引号("""...""")或('''...'' ...
- Java基础知识强化之IO流笔记03:throws的方式处理异常
1. 什么时候使用throws ? (1)定义功能方法时候,需要把出现的问题暴露出来,让调用者去处理.那么就通过throws在方法上标识. (2)有时候,我们是可以对异常进行处理的,但是又有些时候,我 ...
- jquery实现图片切换和js实现图片切换
jquery实现图片切换: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- JS和利用openssl的object C加密得到相同的aes加密密文
这是之前接到的一个工作内容,项目原本的登录操作是获得账号和密码以后,对密码进行一遍MD5加密,然后传递账号和密文到cgi文件.在c中获取到账户以后,从数据库中获取到密码,对密码进行一次MD5的加密,然 ...
- codevs 2800 送外卖(状压dp)
/* f[i][j] 表示走过的点构成i状态 且最后到达的点为j时的最优解 在那最后一个状态就是(1<<n+1)-1 每个点都到达 在由此回到0 */ #include<iostre ...
- 4、第4次课 CSS代码第三节课20150923
1.列表li样式及取值意义 list-style-type : disc | circle | square | decimal | lower-roman | upper-roman | lower ...
- python单元测试之unittest
unittest是python标准库,从2.1开始就有. 标准的使用流程: 1:实现一个unittest.TestCase的子类 2:在其中定义以_test开头的实例函数 3:用unittest.ma ...
- CI框架深入篇(2)一些基础的我之不知道的标准格式
1,一些命名规则:类文件名必大写,其他配置文件,视图文件或着脚本都要小写,类文件名和类名要一致!! 2,类名要大写开头,若是多个单词,那就下划线不要驼封法: 3,变量名要小写全,多个单词下划线分割,后 ...
- PL/SQL中文显示都显示成“?”的问题
PL/SQL中文显示都显示成“?”的问题 首先我在sqlplus里面查询到的中文是正常的,然后再oracle里面的注册表里面看得nls_lang是SIMPLIFIED CHINESE_CHINA.Z ...
- mysql存储过程controller的not found造成混乱的解决办法
打草稿 问题:对于select var1 into var2 ,单select的结果为空的时候(空的意思是没有找到数据,不是该值为null) ,会触发controller的not found 当游标 ...