黑马程序员技术交流社区

标题: InputStream复制文件的问题 [打印本页]

作者: yinxjfly    时间: 2014-7-1 14:46
标题: InputStream复制文件的问题
import java.io.*;
class StreamTest
{
        public static void main(String[] args) throws IOException
        {
                FileInputStream fis=new FileInputStream("C:\\Users\\dell\\Desktop\\StuIfo.txt");
                FileOutputStream fos=new FileOutputStream("C:\\Users\\dell\\Desktop\\StuIfo(复制).txt");

                /*FileInputStream fis=new FileInputStream("C:\\Users\\dell\\Desktop\\9.jpg");
                FileOutputStream fos=new FileOutputStream("C:\\Users\\dell\\Desktop\\9(复制).jpg");*/


                int by=0;
                while((by=fis.read())!=-1)
                {
                        fos.write(by);
                }
               
                fis.close();
                fos.close();
        }
}

问题是:字节文件读取流为什么也可以复制纯文本文件(StuIfo.txt文件中包含中文和英文)?
懂得朋友指导一下哈!!


作者: 人心如水    时间: 2014-7-1 14:58
在电脑上的什么都是字节吧
作者: yinxjfly    时间: 2014-7-1 19:55
晕.....!
怎么就没有马友回帖呢!
求扩散!
高手们都出来露一手啊!
作者: luheqi    时间: 2014-7-1 20:02
字节读取和写入是没限制的,一切都是以二进制存储的,字节就是最小单位了
作者: Whero    时间: 2014-7-1 21:04
这应该与对应的编码表有关,字节流是读一个字节保存一个字节,字符流是先读取一个字节之后保存在缓冲区,等到读到两个字节查编码表再保存。
纯文本的时候用字符流,其它情况使用字节流。
作者: 西地那非    时间: 2014-7-1 21:12
字符流也是以字节流我基础的
作者: yinxjfly    时间: 2014-7-3 12:50
Whero 发表于 2014-7-1 21:04
这应该与对应的编码表有关,字节流是读一个字节保存一个字节,字符流是先读取一个字节之后保存在缓冲区,等 ...

你的会回答被加分了!哈哈!
作者: suiyunyuan    时间: 2014-7-3 13:14
字节流可以读取任意文件。不过用字符流处理纯字符文件对于程序员来说更便捷
作者: yinxjfly    时间: 2014-7-3 13:15
suiyunyuan 发表于 2014-7-3 13:14
字节流可以读取任意文件。不过用字符流处理纯字符文件对于程序员来说更便捷 ...

是的!这个毕姥爷在IO的视频后期代码中有体现,哈哈!
我只是想知道准确的原因!
作者: 格子、    时间: 2014-7-3 14:04
这个问题很简单的啊:
1.计算机存储的可识别的文件都是以二进制也就是0和1的形式存储的。
2.字节流能读取所有的文件是因为它操作的是字节,也就是0和1,是底层的数据。
3.字符流专门用于操作纯文本文件,主要是因为他底层封装了字节转换流和编码表,如果不指定编码表会默认使用本机的编码表。其实是字符流依照面向对象的思想内部封装了字节流的操作和对照编码表的过程,提高的代码的效率。
然后楼主的问题就很好解决了,字节流不管读取什么文件都是没有问题的,它读到的只是字节(0和1),然后在记事本打开的时候,会自动对照编码表翻译并显示的,否则就是一堆乱码了!!!
作者: 会飞De石头    时间: 2014-7-3 16:22
任何文件都是以字节存储的
作者: 慕杰    时间: 2014-7-3 16:40
FileInputStream是从文件系统中的某个文件中获得输入字节,而你纯文本里面不管字符串还是汉字都是由字节组成的,所以当然可以读取了。
作者: Whero    时间: 2014-7-3 18:06
yinxjfly 发表于 2014-7-3 12:50
你的会回答被加分了!哈哈!

嗯哪呗,才发现,给力呀!:lol
作者: cheye0207    时间: 2014-7-3 22:31
每8个二进制一个字节,每个字符由n个字节组成,一个一个字节传,当然也可以实现传字符的功能
作者: yinxjfly    时间: 2014-7-3 22:34
cheye0207 发表于 2014-7-3 22:31
每8个二进制一个字节,每个字符由n个字节组成,一个一个字节传,当然也可以实现传字符的功能 ...

:L:L
你说的没错!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2