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 ...
随机推荐
- A+B问题(java)
import java.util.Scanner; public class Main { public static void main ( String args[] ) { Scanner in ...
- python基础-软件目录开发规范
为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人风 ...
- ASP.net关于C#代码与javaScript函数的相互调用
C#代码与javaScript函数的相互调用 问:1.如何在JavaScript访问C#函数?2.如何在JavaScript访问C#变量?3.如何在C#中访问JavaScript的已有变量?4.如何在 ...
- Android WebView支持WebGL
Android从5.0开始默认支持WebGL,我在实际开发中遇到了一些5.0设备不支持的情况,原来Chromium对运行GPUs不稳定的或者有兼容性问题的设备会禁用WebGL.在Android平台可以 ...
- 如何修改TextField的Label和EmptyText
在需求中常常有修改form表单的标签和空文本提示,在渲染后组件有些字符固定下来 除非使用document进行原始修改,通过查询stackflow,我介绍更方便方法 模拟场景:点击ChangeLabel ...
- php中bindValue的批量提交sql语句
php预编译sql语句,可以批量提交sql,也可以实现防注入 <?php $dsn='mysql:host=127.0.0.1;port=3306;dbname=bisai'; $usernam ...
- mysql死锁--源于外键关联
死锁 存在于行级锁 存在的条件 1.资源只能同时被一个线程占有 2.资源占有不能被强制剥夺 3.请求和保持占有(在请求占有资源的同时能保持现有资源的占有) 4.死循环(一般做程序的人最关注的点) 一到 ...
- (原)C++中指针不初始化就传递的问题
C++中指针的使用.以前在使用指针之前都会初始化.今天没有初始化,然后指针传递后没有内容(testptrnoret),后来发现返回指针的话(testptrret),就可以了. // testptr.c ...
- Nginx并发访问优化
Nginx反向代理并发能力的强弱,直接影响到系统的稳定性.安装Nginx过程,默认配置并不涉及到过多的并发参数,作为产品运行,不得不考虑这些因素.Nginx作为产品运行,官方建议部署到Linux64位 ...
- ASP.NET MVC下的异步Action的定义和执行原理
一.基于线程池的请求处理ASP.NET通过线程池的机制处理并发的HTTP请求.一个Web应用内部维护着一个线程池,当探测到抵达的针对本应用的请求时,会从池中获取一个空闲的线程来处理该请求.当处理完毕, ...