美文网首页
Java Network Programming----byte

Java Network Programming----byte

作者: superuni | 来源:发表于2018-07-09 22:02 被阅读0次

    InputStream接口的通常用法如下:

    InputStream in = ...省略初始化

    byte[] input = new byte[10];

    for (int i = 0; i < input.length; i++) {

        int b = in.read();

        if (b == -1) break;

        input[i] = (byte) b;

    }

    OutputStream os = ...省略初始化

    os.write(input);//public void write(byte[] data) throws IOException

    一个字节字节的读,但是由于InputStream读出来的是int类型,最终OutputStream需要输出的却是byte[]类型的参数,这样会导致数据类型的完整性的却是--int是8位,byte是2位。而且Inputstream读出来的int其实是unsigned的byte,即0到255,但是java没有unsigned类型,signed byte的范围是-128到127,导致的结果就是int在大于2127时转换成byte会变成负数,即丢失二进制的前4位:

    int a =128;

    byte b = (byte) a;

    System.out.println(b);//-128

    如果不注意这点的话,IO流的读写就会出现差错。解决方法很简单,抵消掉多余的负数即可:

    System.out.println(b >= 0? b : b +256);//128

    或者是调用write(int b),由于一个个写性能很差,需要BufferedOutputStream弥补不足。

    相关文章

      网友评论

          本文标题:Java Network Programming----byte

          本文链接:https://www.haomeiwen.com/subject/bjqxpftx.html