java 流与 byte[] 的互转操作

1. InputStream -> byte[]

引入 apache.commons.is 包

import org.apache.commons.io.IOUtils;

byte[] bytes = IOUtils.toByteArray(inputStream);

2. byte[] -> InputStream

InputStream inputStream = new ByteArrayInputStream(bytes);

补充知识:byte[]与各种数据类型互相转换示例

在socket开发过程中,通常需要将一些具体的值(这些值可能是各种JAVA类型)转化为byte[]类型,为此我总结了如下这个示例,贴出来,以便经常翻看

public class TestCase { 

  /**
   * short到字节数组的转换.
   */
  public static byte[] shortToByte(short number) {
    int temp = number;
    byte[] b = new byte[2];
    for (int i = 0; i < b.length; i++) {
      b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位
      temp = temp >> 8;// 向右移8位
    }
    return b;
  } 

  /**
   * 字节数组到short的转换.
   */
  public static short byteToShort(byte[] b) {
    short s = 0;
    short s0 = (short) (b[0] & 0xff);// 最低位
    short s1 = (short) (b[1] & 0xff);
    s1 <<= 8;
    s = (short) (s0 | s1);
    return s;
  }    

  /**
   * int到字节数组的转换.
   */
  public static byte[] intToByte(int number) {
    int temp = number;
    byte[] b = new byte[4];
    for (int i = 0; i < b.length; i++) {
      b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位
      temp = temp >> 8;// 向右移8位
    }
    return b;
  } 

  /**
   * 字节数组到int的转换.
   */
  public static int byteToInt(byte[] b) {
    int s = 0;
    int s0 = b[0] & 0xff;// 最低位
    int s1 = b[1] & 0xff;
    int s2 = b[2] & 0xff;
    int s3 = b[3] & 0xff;
    s3 <<= 24;
    s2 <<= 16;
    s1 <<= 8;
    s = s0 | s1 | s2 | s3;
    return s;
  }    

  /**
   * long类型转成byte数组
   */
  public static byte[] longToByte(long number) {
    long temp = number;
    byte[] b = new byte[8];
    for (int i = 0; i < b.length; i++) {
      b[i] = new Long(temp & 0xff).byteValue();// 将最低位保存在最低位 temp = temp
                            // >> 8;// 向右移8位
    }
    return b;
  } 

  /**
   * 字节数组到long的转换.
   */
  public static long byteToLong(byte[] b) {
    long s = 0;
    long s0 = b[0] & 0xff;// 最低位
    long s1 = b[1] & 0xff;
    long s2 = b[2] & 0xff;
    long s3 = b[3] & 0xff;
    long s4 = b[4] & 0xff;// 最低位
    long s5 = b[5] & 0xff;
    long s6 = b[6] & 0xff;
    long s7 = b[7] & 0xff; 

    // s0不变
    s1 <<= 8;
    s2 <<= 16;
    s3 <<= 24;
    s4 <<= 8 * 4;
    s5 <<= 8 * 5;
    s6 <<= 8 * 6;
    s7 <<= 8 * 7;
    s = s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7;
    return s;
  } 

  /**
   * double到字节数组的转换.
   */
  public static byte[] doubleToByte(double num) {
    byte[] b = new byte[8];
    long l = Double.doubleToLongBits(num);
    for (int i = 0; i < 8; i++) {
      b[i] = new Long(l).byteValue();
      l = l >> 8;
    }
    return b;
  } 

  /**
   * 字节数组到double的转换.
   */
  public static double getDouble(byte[] b) {
    long m;
    m = b[0];
    m &= 0xff;
    m |= ((long) b[1] << 8);
    m &= 0xffff;
    m |= ((long) b[2] << 16);
    m &= 0xffffff;
    m |= ((long) b[3] << 24);
    m &= 0xffffffffl;
    m |= ((long) b[4] << 32);
    m &= 0xffffffffffl;
    m |= ((long) b[5] << 40);
    m &= 0xffffffffffffl;
    m |= ((long) b[6] << 48);
    m &= 0xffffffffffffffl;
    m |= ((long) b[7] << 56);
    return Double.longBitsToDouble(m);
  }    

  /**
   * float到字节数组的转换.
   */
  public static void floatToByte(float x) {
    //先用 Float.floatToIntBits(f)转换成int
  } 

  /**
   * 字节数组到float的转换.
   */
  public static float getFloat(byte[] b) {
    // 4 bytes
    int accum = 0;
    for ( int shiftBy = 0; shiftBy < 4; shiftBy++ ) {
        accum |= (b[shiftBy] & 0xff) << shiftBy * 8;
    }
    return Float.intBitsToFloat(accum);
  }  

   /**
   * char到字节数组的转换.
   */
   public static byte[] charToByte(char c){
    byte[] b = new byte[2];
    b[0] = (byte) ((c & 0xFF00) >> 8);
    b[1] = (byte) (c & 0xFF);
    return b;
   } 

   /**
   * 字节数组到char的转换.
   */
   public static char byteToChar(byte[] b){
    char c = (char) (((b[0] & 0xFF) << 8) | (b[1] & 0xFF));
    return c;
   } 

  /**
   * string到字节数组的转换.
   */
  public static byte[] stringToByte(String str) throws UnsupportedEncodingException{
    return str.getBytes("GBK");
  } 

  /**
   * 字节数组到String的转换.
   */
  public static String bytesToString(byte[] str) {
    String keyword = null;
    try {
      keyword = new String(str,"GBK");
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    return keyword;
  }    

  /**
   * object到字节数组的转换
   */
  @Test
  public void testObject2ByteArray() throws IOException,
      ClassNotFoundException {
    // Object obj = "";
    Integer[] obj = { 1, 3, 4 }; 

    // // object to bytearray
    ByteArrayOutputStream bo = new ByteArrayOutputStream();
    ObjectOutputStream oo = new ObjectOutputStream(bo);
    oo.writeObject(obj);
    byte[] bytes = bo.toByteArray();
    bo.close();
    oo.close();
    System.out.println(Arrays.toString(bytes)); 

    Integer[] intArr = (Integer[]) testByteArray2Object(bytes);
    System.out.println(Arrays.asList(intArr)); 

    byte[] b2 = intToByte(123);
    System.out.println(Arrays.toString(b2)); 

    int a = byteToInt(b2);
    System.out.println(a); 

  } 

  /**
   * 字节数组到object的转换.
   */
  private Object testByteArray2Object(byte[] bytes) throws IOException,
      ClassNotFoundException {
    // byte[] bytes = null;
    Object obj;
    // bytearray to object
    ByteArrayInputStream bi = new ByteArrayInputStream(bytes);
    ObjectInputStream oi = new ObjectInputStream(bi);
    obj = oi.readObject();
    bi.close();
    oi.close();
    System.out.println(obj);
    return obj;
  }
} 

以上这篇java 流与 byte[] 的互转操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java中进制的转换,Byte与16进制的转换方法

    java中对于进制的转换有很多方式,其中对于常见的基本的二进制 八进制 十进制 十六进制等的转换有对于的包装类实现,不需要通过二外的算法来进行实现,具体如下: 首先关于最简单的二进制转换的方法有: 十进制转成十六进制: String Integer.toHexString(int i) 十进制转成八进制 String Integer.toOctalString(int i) 十进制转成二进制  String Integer.toBinaryString(int i) 十六进制转成十进制 Inte

  • Java 3种方法实现进制转换

    由其他进制转换为十进制比较简单,下面着重谈一谈十进制如何化为其他进制. 1.使用Java带有的方法Integer,最简单粗暴了,代码如下 //使用java提供的方法 //但仅局限于比较常用的二进制.八进制.十六进制 public static String trans1(int num, int radix) { if(radix == 2) return Integer.toBinaryString(num); else if(radix == 8) return Integer.toOcta

  • java 各种数据类型的互相转换实例代码

    StringBuilder转化为String String str = "abcdefghijklmnopqrs"; StringBuilder stb = new StringBuilder(str); 整型数组转化为字符串 StringBuilder s = new StringBuilder(); for(i=1;i<=n;i++) { s.append(String.valueOf(a[i])); } String str = ""+s; 字符串转化为

  • Java中字符串与byte数组之间的相互转换

    前言 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成byte数组型,java在字符与数组转换也是非常方便的.下面跟我一起来了解一下字符串与byte之间转换的原理 原理 我们都知道,在Java里byte类型是占用1个字节,即8位的,而16进制的字符占用4位,所以每个byte可以用两个字符来表示,反之亦然. 举个例子 byte = 123 用二进制表示:0111 1011 每4位用字符表示: 7 b 是的,原理就这么简单,接下来用代码实现: byte[] 转1

  • java 流与 byte[] 的互转操作

    1. InputStream -> byte[] 引入 apache.commons.is 包 import org.apache.commons.io.IOUtils; byte[] bytes = IOUtils.toByteArray(inputStream); 2. byte[] -> InputStream InputStream inputStream = new ByteArrayInputStream(bytes); 补充知识:byte[]与各种数据类型互相转换示例 在sock

  • JAVA对象和字节数组互转操作

    0x01 创建要转换的类和主函数 注意这里一定要实现序列化 package day1; import java.io.Serializable; public class Test360 implements Serializable { @Override public String toString() { return "Test360{" + "name='" + name + '\'' + '}'; } String name="test&quo

  • java 流操作对文件的分割和合并的实例详解

    java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代码: package com.dufy.file; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.SequenceInputStream; import java.ut

  • Java流操作之数据流实例代码

    实例1: package dataInputStreamAndPrintStreamDemo; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.PrintStream; //示范如何自键

  • java实现相同属性名称及相似类型的pojo、dto、vo等互转操作

    已应用于实际项目: 1.thrift对象与dto之间的互转 2.pojo与dto之间的互转 3.pojo与vo之间的互转 1.核心转换工具类,对特别复杂类型不做处理,因为业务场景还未覆盖 package littlehow.convert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Field; import java.lang.reflect.Method; import

  • java 文件和byte互转的实例

    实例如下所示: /** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer = null; try { File file = new File(filePath); FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream(1000); byte[]

  • Java实现Http工具类的封装操作示例

    本文实例讲述了Java实现Http工具类的封装操作.分享给大家供大家参考,具体如下: http工具类的实现:(通过apache包)第一个类 import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolE

  • Java实现的数组去重与排序操作详解

    本文实例讲述了Java实现的数组去重与排序操作.分享给大家供大家参考,具体如下: 这里演示Java实现数组去重.排序操作 文中的示例源码编写基于Jdk1.6+.junit4.8.2 java.util.Arrays.sort() 支持对int[],long[],short[],char[],byte[],float[],double[],Object[]进行排序 参考示例代码片段如下 // 声明int 数组,并初始化 int[] intArry = {5,4,7,8,2,0,1,9,3,6,10

  • java项目中读取jdbc.properties文件操作

    java内容 Properties props = Resources.getResourceAsProperties("jdbc.properties"); String url = props.getProperty("jdbc.url"); String driver = props.getProperty("jdbc.driverClass"); String username = props.getProperty("jdbc

  • Java 获取 jar包以外的资源操作

    在使用 jar 执行 java 代码时,有一个需求是从 jar 包所在目录的同级目录下读取配置文件的需求,从网上找了很多方法感觉都挺复杂的, 在这里总结一下. 以classpath 开头的 URL 表示该文件为jar包内文件的路径. 如:classpath://config/app.config表示jar包根路径config文件夹下的app.config文件 以file开头的URL表示该文件为jar 包外文件的路径 如:file://./config/app.config表示 摘要 // 当前我

随机推荐