求教 字节流中OutputStream.write()中直接写InputStream.read()和通过int变量过渡一些的区别

xingyuwei 2012-09-03 05:35:41
学习Java中,看到字节流的时候按照书上的介绍自己写了一段代码,结果运行后保存的文件是错的,

public static void backup(File f01,File f02)throws Exception
{
// File f01 = new File(sourcePath);
// File f02 = new File(path);
int temp=0;
FileInputStream fis = new FileInputStream(f01);
FileOutputStream fos = new FileOutputStream(f02);
while(fis.read()!=-1)
{
fos.write(fis.read());
}

再看书上的代码:

public static void backup(File f01,File f02)throws Exception
{
// File f01 = new File(sourcePath);
// File f02 = new File(path);
int temp=0;
FileInputStream fis = new FileInputStream(f01);
FileOutputStream fos = new FileOutputStream(f02);
while((temp=fis.read())!=-1)
{
fos.write(temp);
}

唯一的区别就是write方法的参数,我是直接写了InputStream.read()方法了,书上是通过一个int变量过渡了一下。但是就是这一些过渡,就决定了我保存文件失败了。 既然InputStream.read()返回值是int,为什么不能直接使用,还必须得用个变量过渡一下呀,求各位大侠帮忙解惑一下,3Q。
...全文
254 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingyuwei 2012-09-04
  • 打赏
  • 举报
回复
哦,明白了,if里面执行了一次read,在write的时候又执行了一次;书上的过渡使得read()只执行一次。聊噶一码西大,3Q。
sffx123 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

read方法是从此输入流中读取下一个数据字节,楼主的做法数据必然会导致错误(读了2次)
[/Quote]+1
scbb 2012-09-04
  • 打赏
  • 举报
回复
while(fis.read()!=-1)
{
fos.write(fis.read());
}

这样写,导致2个错误。

1)while(fis.read()!=-1)
这里的read出来的东西,没有被write
2)fos.write(fis.read());
如果这里读到-1表示读到最后了,这样写就不能判断是不是最后了。
果子狸G 2012-09-03
  • 打赏
  • 举报
回复
= -1的时候说明读完了 米了
果子狸G 2012-09-03
  • 打赏
  • 举报
回复
while(fis.read()!=-1)
{
fos.write(fis.read());
}


fis.read()执行了2边 判断里就读了一个字节 fos.write(fis.read())里读到的是下一个字节
普凡 2012-09-03
  • 打赏
  • 举报
回复
read方法是从此输入流中读取下一个数据字节;楼主的做法必然会导致数据写入错误(读了2次)
普凡 2012-09-03
  • 打赏
  • 举报
回复
read方法是从此输入流中读取下一个数据字节,楼主的做法数据必然会导致错误(读了2次)

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧