黑马程序员技术交流社区
标题:
IO代码问题,求解释.
[打印本页]
作者:
王怡然
时间:
2012-5-11 10:45
标题:
IO代码问题,求解释.
<p>public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("file");// 创建输入流指向file.txt
FileOutputStream fos = new FileOutputStream("goal.txt");// 创建输出流指向dest.txt
int x;// 定义变量, 用来存储数据
<font color="red">while ((x = fis.read()) != -1)// 循环读取, 直到读到末尾为止
</font> fos.write(x);// 将读到的字节写出
fis.close();// 关闭输入流
fis.close();// 关闭输出流
} </p>
复制代码
在这个地方判断循环次数,循环到-1的时候程序停止给目标文件拷贝,
我想问的是为什么我在这个地方把-1改成-2的时候虽然没有报错,但是运行一直不停止,我结束了以后到目标文件去查看的时候为什么里面的数据没有问号"?";求解;
作者:
李啸
时间:
2012-5-11 10:53
((x = fis.read()) != -1)// -1代表文件读取完了 文件都读取完了 但是你改成了-2也就意味着成了死循环因为永远也到不了-2
作者:
谭景宾
时间:
2012-5-11 10:54
<p>public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("file");// 创建输入流指向file.txt
FileOutputStream fos = new FileOutputStream("goal.txt");// 创建输出流指向dest.txt
int x;// 定义变量, 用来存储数据
<font color="red">while ((x = fis.read()) != -1)
// 循环读取, 直到读到末尾为止
</font> fos.write(x);// 将读到的字节写出
fis.close();// 关闭输入流
fis.close();// 关闭输出流
} </p>
当读取到结尾没有数据时,返回的是-1,你改成-2,条件就永远满足不了了,就成了死循环,所以程序会一直运行。
虽然为死循环,但是因为数据读到结尾了,没有数据,所以并没有写入数据到文件里,就没有"?"了
作者:
魏涞
时间:
2012-5-11 10:57
本帖最后由 魏涞 于 2012-5-11 11:01 编辑
查API文档,public int read()
返回:
下一个数据字节;如果已到达文件末尾,则返回 -1。API定义的read()读到文件末位返回的是-1,当你改为-2时,相当于循环条件一直为真,进入死循环,这时拷贝文件访问错误。当你停止死循环时,相当于没有非正常结束程序,所以你看到的文件内容没有?号。
作者:
黄坚声
时间:
2012-5-11 11:44
<p>public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("file");// 创建输入流指向file.txt
FileOutputStream fos = new FileOutputStream("goal.txt");// 创建输出流指向dest.txt
int x;// 定义变量, 用来存储数据
<font color="red">while ((x = fis.read()) != -1)// 这个地方把-1改成-2的时候没有报错很正常。循环读取, 直到读到末尾时它还继续读取,
//因为把-1改成-2就变成了死循环了,又不是乱码问题,所以不出现问号“?”
</font> fos.write(x);// 将读到的字节写出
fis.close();// 关闭输入流
fis.close();// 关闭输出流
} </p>
作者:
刘_浩
时间:
2012-5-11 12:20
是因为在JVM中进行存贮的时候,设定了-1作为结事的一个标志,所以当遇到-1的时候就读写结束了,但是你给了-2,和JVM中不匹配,你永远都不会为-1,所以永远都是成立的,一直在运行。
作者:
小小企鹅
时间:
2012-5-11 12:28
while ((x = fis.read()) != -1) 将fis.read()返回值赋值给x,再判断x的值是否为-1,读到文件结尾时fis.read()返回-1,如果改为-2就不会跳出while语句,成死循环了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2