public class Trans {
public static void main(String[] args) {
try {
readFile();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void readFile() throws IOException {
try (InputStreamReader reader=new InputStreamReader(new FileInputStream("se.md"),"UTF-8");) {
char[] buffer = new char[1000];
int n;
while ((n = reader.read(buffer)) != -1) {
System.out.println("read " + n + " chars.");
}
}
}
}
打印如下
read 1000 chars.
read 1000 chars.
read 1000 chars.
read 1000 chars.
read 1000 chars.
read 1000 chars.
read 1000 chars.
read 1000 chars.
read 1000 chars.
read 1000 chars.
read 305 chars.
char 类型数组 buffer 难道不是应该读一次清空一次吗?
如果不清空的话,buffer 一次就都读满了,没空间放新读的了就应该停下呀?
1
mind3x 2020-09-08 00:23:34 +08:00
……竟然无法反驳
讲真,有没有空间放,是你自己代码的事,不是 API 的事。API 只管往你给的 buffer 里填,至于填了以后你怎么处理这个 buffer 是你的事,难不成一个 read 还要帮你操心你接下来的逻辑么。 |
2
Lonely 2020-09-08 02:50:20 +08:00 via iPhone
不用清空也能往里面塞数据哇,这不就达到复用的效果了。
|
3
wangsongyan 2020-09-08 05:38:26 +08:00 via iPhone
数组赋值,没毛病
|
4
yidinghe 2020-09-08 07:43:47 +08:00 via Android
read 方法不管 buffer 数组的当前内容怎么样,都会从开头开始填充,覆盖原来的内容。所以当你认为可以重新填充了,才会调这个方法。
|
5
zpf124 2020-09-08 10:21:46 +08:00
你在用现实的逻辑去猜想 电路逻辑。
现实中 你三个桶放了东西不倒出来没法放新的东西,然而电路层面并不像桶,更不是在往桶里放东西。 非要是比喻的话,更像是在贴贴纸,我才不管你这原来下边是啥颜色的,我在上面糊一层啥颜色的纸就是啥颜色,下次再换颜色我还要把过去的贴纸扣掉??? 不!直接再糊一层就完事了。 |
6
zsdroid 2020-09-08 10:38:13 +08:00
典型的脑子转不过弯来。buffer[0]='a';buffer[0]='b';buffer[0]='c';有问题吗
|
7
dadachen1997 2020-09-08 10:43:15 +08:00
继续 read 就是覆盖填充,不 read 也没必要专门擦除 buffer 吧,最后直接释放掉完事了。
|
8
togou 2020-09-08 12:11:59 +08:00
缓冲区这个概念就一直混淆人,TCP 的缓冲区更有那味
|
9
qaqLjj OP 明白了 谢谢大家
|
10
qm332207252 2020-09-09 17:08:49 +08:00
类似的,在操作系统中你删除文件并不是真的将硬盘上的文件“删除”。
|