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 ...
随机推荐
- 从sockaddr中取得Ip地址和端口号
在socket编程中,服务器端accept()等待一个客户端的连接,当连接成功后,accept拷贝客户端的地址信息到sin_addr里面,我们如何从sin_addr取得此客户端的Ip地址和端口号呢? ...
- Android 带你玩转实现游戏2048 其实2048只是个普通的控件(转)
1.概述 博主本想踏入游戏开放行业,无奈水太深,不会游泳:于是乎,只能继续开发应用,但是原生Android也能开发游戏么,2048.像素鸟.别踩什么来着:今天给大家带来一篇2048的开发篇,别怕不分上 ...
- yii 自动生成的内容,分页信息(Displaying 1-10 of 15 results.)如何修改或是yii cgridview template summary
问的白一点就是 Displaying 1-10 of 15 results 如何翻译 如果搜索的话, 搜这个会出来很多内容 yii cgridview template summary 好了,其他不说 ...
- Linux shell入门基础(一)
Linux shell入门基础(一): 01.增加删除用户: #useradd byf userdel byf(主目录未删除) userdel -r byf 该用户的属性:usermod 用 ...
- Android开发手记(14) 使用MediaPlayer播放mp3
1.获取MediaPlayer实例 (1)可以直接通过new或者create方式: 调用setDataSource和create的区别是,create时已经执行了MediaPlayer.prepare ...
- Xcode7.0设置网络白名单
- JavaScript 客户端JavaScript之样式表操作(DOM API 提供模块之一)
层叠样式 表和动态HTML 层叠样式表(CSS)是指定HTML文档或XML文档的表现的标准. 使用CSS和Javascript,可以创建出各种视觉效果,这些效果可以统称为动态HTML(DH ...
- 查找Mysql数据库连接jar包和对应的Driver和Url
以前写jdbc连接向来都是直接copy,对于连接数据库的jar包在哪下载,对应的Driver类是哪一个,数据库连接串怎么找等等都没有做过,今天从零开始整了一遍. 使用的数据库是Mysql 一.已安装了 ...
- Memcache的基本应用
$mc = new Memcache(); $mc->connect('127.0.0.1', 11211); $sql = "select * from user where id= ...
- thinkphp 配置
ThinkPHP框架中所有配置文件的定义格式均采用返回PHP数组的方式,格式为: //项目配置文件 return array( 'DEFAULT_MODULE' => 'Index', //默认 ...