InputStream in = context.openFileInput(filename);
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = in.read(buffer)) !=-1)
{
os.write(buffer,0,len);
}上面的代码中,while循环我有些不理解。假设在当初的in中存在2000个数据。
按照此循环,len = in.read(buffer) 开始会读到1024个。这个时候 ,len = 1024;
由于buffer存满,接着可能执行os.write(buffer,0,len);
这样,在下一次循环中。
当len = 2000 - 1024的时候,继续往下读,发现到了文件末尾,所以len = -1;这个时候,buffer中存在的一些数据就不会写入到os中,因为 = -1的条件会让该循环终止。如果不是如此:
那么是否每一次len被赋值,都会执行循环体,那么read一次究竟读入多少数据呢。len的值究竟会是多少???是不是发生变化,还是根据某些元素(比如CPU,内存之类的)而确定一个固定的值。在while循环没反应过来的时候,一下就往buffer里写入了很多的数据,接着就执行循环体 ?1024这个值有什么特殊的含义么?
如果真是这种情况,那么是否会瞬间往buffer里写入上万个字节,导致数据溢出呢?如果不是如此,那么是一个字节,一个字节的往buffer里写入数据(或者某个其他固定的数值),那么这个1024和len存在有什么意义吗?
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = in.read(buffer)) !=-1)
{
os.write(buffer,0,len);
}上面的代码中,while循环我有些不理解。假设在当初的in中存在2000个数据。
按照此循环,len = in.read(buffer) 开始会读到1024个。这个时候 ,len = 1024;
由于buffer存满,接着可能执行os.write(buffer,0,len);
这样,在下一次循环中。
当len = 2000 - 1024的时候,继续往下读,发现到了文件末尾,所以len = -1;这个时候,buffer中存在的一些数据就不会写入到os中,因为 = -1的条件会让该循环终止。如果不是如此:
那么是否每一次len被赋值,都会执行循环体,那么read一次究竟读入多少数据呢。len的值究竟会是多少???是不是发生变化,还是根据某些元素(比如CPU,内存之类的)而确定一个固定的值。在while循环没反应过来的时候,一下就往buffer里写入了很多的数据,接着就执行循环体 ?1024这个值有什么特殊的含义么?
如果真是这种情况,那么是否会瞬间往buffer里写入上万个字节,导致数据溢出呢?如果不是如此,那么是一个字节,一个字节的往buffer里写入数据(或者某个其他固定的数值),那么这个1024和len存在有什么意义吗?
另外,LZ可以试试1024数组读的方式,和一个byte一个byte读的方式,看看时间上的消耗情况。
然后再看看一些理论性的东西,可能帮助更大