在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--字节数组输入、输出流的更多相关文章

  1. Java知多少(69)面向字节的输入输出流

    字节流以字节为传输单位,用来读写8位的数据,除了能够处理纯文本文件之外,还能用来处理二进制文件的数据.InputStream类和OutputStream类是所有字节流的父类. InputStream类 ...

  2. 第27章 java I/O输入输出流

    java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...

  3. Java复习7.输入输出流

    Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...

  4. 八. 输入输出(IO)操作4.面向字节的输入输出流

    字节流以字节为传输单位,用来读写8位的数据,除了能够处理纯文本文件之外,还能用来处理二进制文件的数据.InputStream类和OutputStream类是所有字节流的父类. InputStream类 ...

  5. java中基本输入输出流的解释(flush方法的使用)

    转自:http://fsz521job.itpub.net/post/5606/34827 网络程序的很大一部分是简单的输入输出,即从一个系统向另一个系统移动字节.字节就是字节,在很大程度上,读服务器 ...

  6. Java I/O输入输出流详解

    一.文件的编码               开发时一定要注意项目默认的编码!!!!!!!!               文件操作的时候一定要记得关闭!!!!!!!!        ASCII:美国标准 ...

  7. Java IO学习--输入输出流

    一.Java IO的定义 I/O:输入输出系统,由输入输出控制系统和外围设备两部分组成. Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输 ...

  8. Java工具类-输入输出流

    输入输出流 1.概念 输入输出流:文件复制,上传 输出流: System.out.println() 写操作,程序将字符流写入到"目的地",比如打印机和文件等 输入流 :Scann ...

  9. Java I/O输入输出流

    IO流的复习总结 ------注:蓝色背景段落是例子:红色背景的字段IO流的功能类. 编码问题 String s = "威力锅ABC";  //utf-8编码中文占用三个字节,英文 ...

  10. Java的IO输入输出流类的介绍(有图)

    一.字节流 1.InputStream/OutputStream(输入流与输出流几乎一一对应) 读取的方法   int read()   int read(byte[] buffer)   int r ...

随机推荐

  1. TinyXml 快速入门(三)

    在<TinyXml 快速入门(二)>介绍使用tinyxml库获取xml文件声明,查询指定节点.删除指定节点的做法.在本文中继续介绍修改指定节点和增加节点的做法. 修改节点其实和查询指定节点 ...

  2. SQLServer 工具技巧

    SQLServerProfiler 的使用 http://www.jikexueyuan.com/course/1712.html

  3. 4、第4次课 CSS代码第三节课20150923

    1.列表li样式及取值意义 list-style-type : disc | circle | square | decimal | lower-roman | upper-roman | lower ...

  4. json数据获取

    今天Pei讲了一个android获取json数据的方式吧 代码什么的没看懂,反正知道就是那么一回事,用AsyncTask线程来获取json数据,我也不知道这样说对不对 估计以后回过来看的时候会发现一大 ...

  5. 问题: Type mismatch in key from map: expected org.apache.hadoop.io.Text, recieved org.apache.hadoop.io.LongWritable 解决方案

    在Job中添加相应的输入类型,例如: job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.clas ...

  6. egrep和grep有什么区别

    grep默认不支持正则表达式,egrep默认支持正则表达式,egrep 等于 grep -E 命令.

  7. php魔法常量

    有七个魔术常量它们的值随着它们在代码中的位置改变而改变.例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定.这些特殊的常量不区分大小写,如下: 名称 说明 __LINE__ 文件中的当前行号 ...

  8. IO流(随机流,数组内存流

    File file1=new File("test1.txt"); RandomAccessFile in2=new RandomAccessFile(file1,"rw ...

  9. 微信php接入设计案列

    <?php namespace Home\Controller; use Think\Controller; use Com\Wechat; use Com\WechatAuth; class ...

  10. 解决.VS2012+EF5.0开发的网站在window server2003上无法部署的问题(转载)

    转载:http://www.cnblogs.com/eggTwo/p/3653825.html (一)前  言                                             ...