当前位置: 代码迷 >> J2SE >> byte[1024] 这个有多大,该如何解决
  详细解决方案

byte[1024] 这个有多大,该如何解决

热度:2043   发布时间:2016-04-23 20:40:16.0
byte[1024] 这个有多大
最近学习网络编程看到的代码如下:不知道 byte[] buf = new byte[1024]; 中buf是多大。比如上传文件,好像不管上传的内容有多大,都能用这个,能不能解释一下这句什么意思
InputStream in = s.getInputStream();

byte[] buf = new byte[1024];
int len = in.read(buf);
String text = new String(buf, 0, len);

------解决方案--------------------
这没有什么大的关系,你就是用999这样的数字也没有问题,就是每次读取的最大字节数。
例如一个2049字节的文件,你如果把buf设置成1024字节,则需要读3次,第一、二次读取到1024个字节,第三次读取到1个字节,就这么简单,与实际程序运行效果没有影响,只不过是多读几次而已。不过网络编程的时候,大小设置就需要比较合理了,因为要考虑粘包的问题。
------解决方案--------------------

InputStream in = s.getInputStream();
        byte[] buf = new byte[1024];      //分配1024个字节大小的内存给buf
        int len = in.read(buf);                              //等同于read(b, 0, b.length) ,即读取1024个字节放到buf中,
        String text = new String(buf, 0, len);    //将读取的1024个字节构造成一个String类型的变量

------解决方案--------------------
InputStream in = s.getInputStream();

byte[] buf = new byte[1024];
int len = in.read(buf);
String text = new String(buf, 0, len);

你的这段代码是将输入流中的1024个字节放入buf缓存, 然后将buf缓存中的字节转化为字符串。
如果没有循环读流的话,那就只读了1024个字节,buf的大小对程序结果有影响,可能读不到所有输入流中的字节。
如果你有循环读流,那buf的大小其实对程序的结果是没有影响的,这种情况下,buf之相当于一个中间临时缓存。
------解决方案--------------------
引用:
Quote: 引用:

这个就是循环读取,是一个临时空间,多大都没关系

就是说它自身就有循环,不需要自己再写一个循环,是这样的吗?

不是自身有循环,这样写只是定义一个字节数组作为一个缓存,临时存储输入流读取到的数据
如果你没加循环的话就只读1024Byte大小的数据。这样写应该是确定要读取的文件不超过1KB吧。
如果不确定读取的数据大小就要加循环了

InputStream in = s.getInputStream();
         
byte[] buf = new byte[1024];
int len = -1;
while((len=in.read(buf))!=-1){
       //这里对读取到的数据进行处理
       // 比如这样
      String text = new String(buf, 0, len);
}

  相关解决方案