FileOutputStream.flush() 在用缓存时才会有用。
排名靠前同学问out.write(buf, 0, b)的,仔细听课,听不明白就Google。
排名靠前同学问out.write(buf, 0, b)的,仔细听课,听不明白就Google。
2016-07-26
持了两个数的十进制相同。
举例:当不用 b & 0xff时 byte:-1 二进制(补码):1111 1111 转为Int(补码):1111 1111 1111 1111 1111 1111 1111 1111。本来我们想要的是 -1 的十六进制字符串 ff,结果得到 ff ff ff ff。当byte是正数时不影响。所以要使用 b & 0xff,处理流程:首先 Jvm检测到byte可能转化为Int,就将byte的高位补0或1(按符号位补0或1,即正数补0,对我们要的结果不影响。负数补1,结果就多了个 ff ff ff)因为我们只要低8位,所以与0xff与运算,把高位都变为0。
举例:当不用 b & 0xff时 byte:-1 二进制(补码):1111 1111 转为Int(补码):1111 1111 1111 1111 1111 1111 1111 1111。本来我们想要的是 -1 的十六进制字符串 ff,结果得到 ff ff ff ff。当byte是正数时不影响。所以要使用 b & 0xff,处理流程:首先 Jvm检测到byte可能转化为Int,就将byte的高位补0或1(按符号位补0或1,即正数补0,对我们要的结果不影响。负数补1,结果就多了个 ff ff ff)因为我们只要低8位,所以与0xff与运算,把高位都变为0。
System.out.print(Integer.toHexString(b & 0xff) + " ");
如果把Integer.toHexString(b & 0xff)换为Integer.toHexString(b)则处理流程:
1、先将b转为int(Integer.toHexString()的参数是Int型)
2、从低位每4位(bit)转为十六进制,如果得到的十六进制高位是0则舍弃.(如转化为16进制是00 00 00 0A则得到的字符串是 A )
之所以用 b & 0xff 是因为在第 1 步,当一个字节(byte,范围-128到127)类型转换为Int型时,保
如果把Integer.toHexString(b & 0xff)换为Integer.toHexString(b)则处理流程:
1、先将b转为int(Integer.toHexString()的参数是Int型)
2、从低位每4位(bit)转为十六进制,如果得到的十六进制高位是0则舍弃.(如转化为16进制是00 00 00 0A则得到的字符串是 A )
之所以用 b & 0xff 是因为在第 1 步,当一个字节(byte,范围-128到127)类型转换为Int型时,保
byte[]数组的大小我们可以通过File的length()或者FileInptStream的available()来得到文件字节的大小,这样开辟出来的内存大小就跟文件的字节数是一致的。例如:byte[] buff = new byte[(int) fileNames.length()];因为length返回的是long类型的,最大数值可以支持1TB,而FileInputStream的availbale()返回的是int类型的,最大数值只能支持到1.99GB,所以使用length()可以避免很多不必要的错误和麻烦!
2016-07-24