当前位置: 首页 > news >正文

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));
        
    }
}

转载于:https://www.cnblogs.com/dmir/p/4915790.html

相关文章:

  • ios测试基础三:xcode对iOS项目打包与证书配置
  • java大数加法
  • Centos7下yum安装mplayer和vlc播放器
  • MySQL 5.7.17源码编译安装说明
  • rsync同步工具实战
  • App 引导界面
  • ionic导入其它js库
  • 路由表和转发表解释
  • volatile详解
  • Weblogic读不到Word文件
  • DDNS在生产环境中的应用
  • Java高精度四则运算(无括号限制)
  • StartUpListener类
  • linux .o,.a,.so文件解析
  • 联想壁纸下载
  • Effective Java 笔记(一)
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • JS数组方法汇总
  • js正则,这点儿就够用了
  • LintCode 31. partitionArray 数组划分
  • React16时代,该用什么姿势写 React ?
  • SpiderData 2019年2月25日 DApp数据排行榜
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SSH 免密登录
  • vue脚手架vue-cli
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 程序员该如何有效的找工作?
  • 给github项目添加CI badge
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 力扣(LeetCode)56
  • 算法---两个栈实现一个队列
  • 学习Vue.js的五个小例子
  • 一道面试题引发的“血案”
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 函数计算新功能-----支持C#函数
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #if #elif #endif
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (9)STL算法之逆转旋转
  • (C#)获取字符编码的类
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四)linux文件内容查看
  • (五)IO流之ByteArrayInput/OutputStream
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转载)Linux 多线程条件变量同步
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Framework杂记
  • .Net Redis的秒杀Dome和异步执行