(1)当输入流对象调用这个方法时,一次调用只会从某个文件中读取一字节(也就是8位)的二进制数据,然后返回读取的一字节数据。
(2)执行完一次调用之后,该方法并不会立即停掉,而是会进入阻塞状态。进程阻塞就是进程会在后台挂起,即,占着cpu内存,却不执行任何任务,但这样可以加快启动与调用的速度。
一旦这样的进程过多就会很耗费计算机各种资源,所以每次我们读完文件数据之后,都必须关掉输入输出流的原因就是这么回事。
(3)直到利用“同一个输入流对象”再次调用它,那么该read方法就会被唤醒,它就会接着从上次停止的地方继续执行读取操作。
(1)当输入流对象调用这个方法时,该方法底层会一字节一字节的读取数据,每读取到一字节数据就会自动填充到缓存数组byte[]中去(从数组偏移量0开始),
直到填满缓存数组,该read方法就会返回本次调用填充缓存数组的总字节数。
(2)执行完一次调用之后,该方法并不会立即停掉,而是会进入阻塞状态。进程阻塞就是进程会在后台挂起,即,占着cpu内存,却不执行任何任务,但这样可以加快启动与调用的速度。
一旦这样的进程过多就会很耗费计算机各种资源,所以每次我们读完文件数据之后,都必须关掉输入输出流的原因就是这么回事。
(3)一般循环调用该方法读取文件数据时,不到文件末尾,每次读取的总字节数都会与缓存数组长度相等。
也就是说倒数第三次以上读取的文件总字节数,
都等于缓存数组长度;但是倒数第二次读取的总字节数就不一定等于缓存数组的长度,因为文件未被读取数据已经没了;
最后一次读取返回的才是-1,表示读取文件数据截止。
(4)直到利用“同一个输入流对象”再次调用它,那么该read方法就会被唤醒,它就会接着从上次停止的地方继续执行读取操作。
(5)注意:若最后一次调用该方法去读取文件的数据不够填满缓存数组,那么则会返回实际填充缓存数组的总字节数并进入阻塞状态;此时,再次调用该read方法,返回的才是-1,表示文件末尾截止了!!!
(1)当输入流对象调用这个方法时,该方法底层会一字节一字节的读取数据,每读取到一字节数据就会自动填充到缓存数组byte[]中去(从数组偏移量off开始),
一次方法调用中最多填充len字节数到缓存数组中,该read方法就会返回本次调用填充缓存数组的总字节数。
(2)执行完一次调用之后,该方法并不会立即停掉,而是会进入阻塞状态。进程阻塞就是进程会在后台挂起,即,占着cpu内存,却不执行任何任务,但这样可以加快启动与调用的速度。
一旦这样的进程过多就会很耗费计算机各种资源,所以每次我们读完文件数据之后,都必须关掉输入输出流的原因就是这么回事。
(3)直到利用“同一个输入流对象”再次调用它,那么该read方法就会被唤醒,它就会接着从上次停止的地方继续执行读取操作。
(4)如果off为负数,或者len为负数,也或者 len为大于 b.length - off 的数,这个方法运行时都会报错
(1)当输入流对象调用这个方法时,一次调用只会从某个文件中读取一字符的二进制数据,然后返回读取的一字符数据。
注意:若字符是英文,则是读取一字节的数据;若字符是汉字,则是读取2字节的数据;返回的是二进制数据,显示在控制台会转换为int类型数据,只要将这个int类型数据赋值给char类型数据再进行输出就可以成功转换为字符了。
(2)执行完一次调用之后,该方法并不会立即停掉,而是会进入阻塞状态。进程阻塞就是进程会在后台挂起,即,占着cpu内存,却不执行任何任务,但这样可以加快启动与调用的速度。
一旦这样的进程过多就会很耗费计算机各种资源,所以每次我们读完文件数据之后,都必须关掉输入输出流的原因就是这么回事。
(3)直到利用“同一个输入流对象”再次调用它,那么该read方法就会被唤醒,它就会接着从上次停止的地方继续执行读取操作。
(1)当输入流对象调用这个方法时,该方法底层会一字符一字符的读取数据,每读取到一字符数据就会自动填充到缓存数组char[]中去(从数组偏移量0开始),
直到填满缓存数组,该read方法就会返回本次调用填充缓存数组的总字符数。
(2)执行完一次调用之后,该方法并不会立即停掉,而是会进入阻塞状态。进程阻塞就是进程会在后台挂起,即,占着cpu内存,却不执行任何任务,但这样可以加快启动与调用的速度。
一旦这样的进程过多就会很耗费计算机各种资源,所以每次我们读完文件数据之后,都必须关掉输入输出流的原因就是这么回事。
(3)一般循环调用该方法读取文件数据时,不到文件末尾,每次读取的总字符数都会与缓存数组长度相等。
也就是说倒数第三次以上读取的文件总字符数,都等于缓存数组长度;
但是倒数第二次读取的总字符数就不一定等于缓存数组的长度,因为文件未被读取数据已经没了;最后一次读取返回的才是-1,表示读取文件数据截止。
(4)直到利用“同一个输入流对象”再次调用它,那么该read方法就会被唤醒,它就会接着从上次停止的地方继续执行读取操作。
(5)注意:若最后一次调用该方法去读取文件的数据不够填满缓存数组,那么则会返回实际填充缓存数组的总字符数并进入阻塞状态;此时,再次调用该read方法,返回的才是-1,表示文件末尾截止了!!!
(1)当输入流对象调用这个方法时,该方法底层会一字符一字符的读取数据,每读取到一字符数据就会自动填充到缓存数组char[]中去(从数组偏移量off开始),
一次方法调用中最多填充len字符数到缓存数组中,该read方法就会返回本次调用填充缓存数组的总字符数。
(2)执行完一次调用之后,该方法并不会立即停掉,而是会进入阻塞状态。进程阻塞就是进程会在后台挂起,即,占着cpu内存,却不执行任何任务,但这样可以加快启动与调用的速度。
一旦这样的进程过多就会很耗费计算机各种资源,所以每次我们读完文件数据之后,都必须关掉输入输出流的原因就是这么回事。
(3)直到利用“同一个输入流对象”再次调用它,那么该read方法就会被唤醒,它就会接着从上次停止的地方继续执行读取操作。
(4)如果off为负数,或者len为负数,也或者 len为大于 b.length - off 的数,这个方法运行时都会报错
(1)从磁盘往cpu内存读取数据的速度为v1
(2)从cpu内存往程序里面读取数据的速度为v2
(3)从程序里面往cpu内存写数据的速度为v3
(4)从cpu内存往磁盘写数据为v4
结论:v2 = v3,v1 = v4,v2 >> v1,v3 >> v4