int bytes = 0;
bytes = in.read(buf, 0, buf.length);
System.out.println(bytes);
System.out.println(bytes = in.read(buf,0,10));
System.out.println(bytes = in.read(buf, 0, buf.length));
返回值分别是
100
-1
-1
这种不同的返回值是怎么出现的呢?源码里面的判断么?
read() 返回的是 读入缓存的总字节数;如果因为已到达流末尾而不再有数据可用,则返回 -1。
返回 100,说明已经读取了100个字节数到缓存数组中;
返回-1,说明已经读取到了流末尾,没有数据可读了。
上面代码,第一次已经一次性把流内的字节读完了,所以后面都是返回-1。
其中一段是这样的~
public static void printHexBYByteArray(String fileName)throws IOException{
FileInputStream in = new FileInputStream(fileName);
byte [] buf = new byte[8*1024];
// int bytes = in.read(buf,0,buf.length);//一次性读完,说明字节数组足够大
// int j = 1;
// for(int i = 0;i<bytes;i++)
// {
// if(buf[i]<=0xf)
// {
// System.out.print("0");
//
// }
// System.out.print(Integer.toHexString(buf[i])+" ");
// if(j++%10 == 0)
// {
// System.out.println();
// }
int bytes = 0;
// bytes = in.read(buf, 0, buf.length);
// System.out.println(bytes);
// System.out.println(bytes = in.read(buf,0,10));
// System.out.println(bytes = in.read(buf, 0, buf.length));
//
int j = 0;
while((bytes = in.read(buf, 0, buf.length))!=-1){
for(int i = 0; i<bytes ; i++)
{
if(buf[i] <= 0xf)
{
System.out.print("0");
}
System.out.print(Integer.toHexString(buf[i] & 0xff)+" ");
if(j++%10 == 0)
{System.out.println();}}}
in.close();}
完整的和老师演示的是一样的,我就是把bytes单独提出来让它赋值 in.read(buf, 0, buf.length),然后出现上面的额结果
完整代码来一发