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

    }
}
时间: 2024-10-12 07:13:04

java--字节数组输入、输出流的相关文章

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

字节流以字节为传输单位,用来读写8位的数据,除了能够处理纯文本文件之外,还能用来处理二进制文件的数据.InputStream类和OutputStream类是所有字节流的父类. InputStream类 面向字节的输入流都是InputStream类的子类,其类层次结构如图10-6所示. 图10-6 InputStream的类层次结构图 表 10-5 列出了 InputStream 的主要子类及说明. 表 10-5 InputStream 的主要子类 类名 功能描述 FileInputStream

Java和C#输入输出流方法

1,JAVA中操作方法: import java.io.*; public class FileInputStreamTest { public static void main(String[] args) throws IOException { //创建字节输入流 FileInputStream fis = new FileInputStream("FileInputStreamTest.java"); //创建一个长度为1024的竹筒 byte[] bbuf = new byt

Java I/O输入输出流详解

一.文件的编码               开发时一定要注意项目默认的编码!!!!!!!!               文件操作的时候一定要记得关闭!!!!!!!!        ASCII:美国标准信息交换码,用一个字节的7位可以表示一个字符        ISO8859-1:拉丁码表,西欧标准字符集,用一个字节的8位表示        GB2312:中文编码表,用两个字节来表示中文编码        GBK:中文编码表的升级,融合了更多表示中文文字符号        GB18030:GBK的

字节/字符——输入/输出流

一:1.计算机如何存储中文的? 当前平台默认编码集 :GBK 一个中文两个字节第一个字节:一定是负数第二个字节:一般是负数,可能也会是正数,不会影响的结果.*/public class StringDemo {public static void main(String[] args) {//定义一个字符串// String str = "abc" ;// String str = "我爱你中国" ;String str = "你好" ;//[-

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

一.字节流 1.InputStream/OutputStream(输入流与输出流几乎一一对应) 读取的方法   int read()   int read(byte[] buffer)   int read(byte[] buffer,int offset,int length) 2.各种类的区分,常用的9种(按处理的基本单位划分) 2.1.以字节数组为颗粒(颗粒就是基本单位的意思) ByteArrayInputStream 2.2.以文件为颗粒 FileInputStream 2.3.管道流(

Java中的输入输出流

FileInputStream和FileOutputStream 创建含磁盘文件的输入 输出流对象. FileInputStream继承自InputStream,用于读取本地文件中的字节数据,由于所有的文件都是字节为导向,所以这个类适合于操作任何类型的文件. 构造方法: 实例:FileInputStream fileInputStream = new FileInputStream(new File("path")); 其他方法: read()方法:从输入流中读取最多b.length个

Java标准流输入输出流In(Out)putStream,ReaderWriter等总结(1)

一,标准输出流System.out System.out向标准输出设备输出数据,方法有很多: print()和println()的主要区别是后者输出完了主动转行前者不转行,printf()主要是格式化输出 一,标准输入流System.in System.in读取标准输入设备数据(从标准输入获取数据,一般是键盘)int read() //返回ASCII码.若,返回值=-1,说明没有读取到任何字节读取工作结束. int read(byte[] b)//读入多个字节到缓冲区b中返回值是读入的字节数 p

java实验8-Java输入输出流

1 读写文件 [实验目的] (1)掌握文本文件的读写方法. (2)掌握随机文件的读写方法. (3)掌握InputStream.OutputStream抽象类的基本使用. (4)掌握FileInputStream.FileOutputStream.DataInputStream.DataOutputStream 抽象类的基本使用. [实验要求] 要求一:建立StreamDemo类,实现标准输入输出流的建立,能从键盘读取字符串并输出该字符串. 要求二:应用Java的输入输出流,对一个图片文件进行处理

JAVA文件读写输入输出流关闭问题、JAVA垃圾回收

切记: 读写文件一定要及时关闭输入输出流 项目中,用到将rtf文档上传后修改一个更新标记为0未更新,另外一个程序将文档上传到LED屏上面,LED程序检测到更新标记为未更新时将状态投到LED上面,并将状态更新为1已更新. 现象:上传文件时使用输入输出流,上传成功后LED屏不显示更新文档,为空. 部分代码: public void save(){ upload(); save(XXXXX); } public void upload() throws Exception{ //以服务器的文件保存地址

java Io文件输入输出流 复制文件

package com.hp.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class InputAndOutputFile{ //都是纯手打  如果复制显示不能复制 也懒得改  手敲 格式不好看见谅 public static void main(String