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)); } }
作者:奋斗的珞珞
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话