A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

OmbreAmant丶C

中级黑马

  • 黑马币:85

  • 帖子:90

  • 精华:0

© OmbreAmant丶C 中级黑马   /  2016-6-13 19:30  /  1828 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 OmbreAmant丶C 于 2016-6-23 00:04 编辑

如题,今天刚学I/O,有点搞不清 输入输出  还有Copy 原理 有大神可以指点下么?-----------------------------------------华丽的分割线---------------------------------------------
现在再说数据库了  有点搞不定 大牛们有没有好的建议 学好一点!!!!

29 个回复

倒序浏览
input reader,表示把数据写到流中,比如从文件中读取数据到流中或者内存,output,writer,把数据从流中读或者写出来,比如保存在文件中,有个比喻,input reader就是拿个桶往水池里加水,output,writer把水池的水放到桶中
回复 使用道具 举报
TCK8888 发表于 2016-6-13 20:01
input reader,表示把数据写到流中,比如从文件中读取数据到流中或者内存,output,writer,把数据从流中读或 ...

谢谢你的解答 这个比喻很不错我记住了 再次感谢!!!
回复 使用道具 举报
相当于写的java代码,输出就是输出流 从外面向代码读就是输入流了
回复 使用道具 举报
lifeiwangyue 发表于 2016-6-13 23:01
相当于写的java代码,输出就是输出流 从外面向代码读就是输入流了

谢谢!!!
回复 使用道具 举报
输入和输出的主题都是相对于内存而言的,   内存往外部( 文件 ) 写内容是 输出,
内存从外部读入叫做输入流,   而所有流最根本的都是字节流,,  , 通过各种流架起的管道 实现数据 在内存和外部之间的信息交流
回复 使用道具 举报
jhyang 初级黑马 2016-6-14 22:39:05
7#
关于Copy的原理,输入流FileInputStream创建对象关联一个文件(可以是相对路径,也可以使绝对路径),而输出流FileOutputStream创建对象关联另一个文件(FileOutputStream如果没有相对文件,内部会创建一个)。Copy也就是说将前者关联的文件内容Copy到后者关联的文件中。用while循环逐个字节读取,也就是说,从这里拿多少,就给那边多少。一直到结尾(返回-1)为止。(也可以使用Buffered或者小数组来提升效率)。
回复 使用道具 举报
jhyang 发表于 2016-6-14 22:39
关于Copy的原理,输入流FileInputStream创建对象关联一个文件(可以是相对路径,也可以使绝对路径),而输 ...

快速回答....为什么-1是int类型,不是byte类型的
回复 使用道具 举报
haojingwei310 发表于 2016-6-14 22:12
输入和输出的主题都是相对于内存而言的,   内存往外部( 文件 ) 写内容是 输出,
内存从外部读入叫做输入流,  ...

谢谢你百忙之中给我的指点!!!!
回复 使用道具 举报
善良的死神达乐 发表于 2016-6-15 01:19
快速回答....为什么-1是int类型,不是byte类型的

我觉得应该是默认整数都是 int 吧!
回复 使用道具 举报
jhyang 发表于 2016-6-14 22:39
关于Copy的原理,输入流FileInputStream创建对象关联一个文件(可以是相对路径,也可以使绝对路径),而输 ...

谢谢你的回答!!!
回复 使用道具 举报
善良的死神达乐 发表于 2016-6-15 01:19
快速回答....为什么-1是int类型,不是byte类型的

因为read()方法的返回值是int
回复 使用道具 举报
OmbreAmant丶C 发表于 2016-6-15 12:28
谢谢你的回答!!!

首先我们要知道,程序运行是以补码的形式存在的,当byte读到文件的中间时,很有可能出现11111111的情况,而且这8个1就是byte的-1.并且,程序规定是遇到-1就停止运行,这样问价读到一半就不读了,这不是八阿哥嘛?所以不能用byte.
但是int不一样,因为int会在前面默认加上24个0,也就是说,永远不会出现-1的情况,并且在写出的时候,系统也会自动砍去24个0.这...就是原因...
回复 使用道具 举报
jhyang 发表于 2016-6-15 21:47
因为read()方法的返回值是int

首先我们要知道,程序运行是以补码的形式存在的,当byte读到文件的中间时,很有可能出现11111111的情况,而且这8个1就是byte的-1.并且,程序规定是遇到-1就停止运行,这样问价读到一半就不读了,这不是八阿哥嘛?所以不能用byte.
但是int不一样,因为int会在前面默认加上24个0,也就是说,永远不会出现-1的情况,并且在写出的时候,系统也会自动砍去24个0.这...就是原因...
回复 使用道具 举报
dubei1993 来自手机 中级黑马 2016-6-16 00:34:05
15#
善良的死神达乐 发表于 2016-6-15 01:19
快速回答....为什么-1是int类型,不是byte类型的

返回的是长度.无数据返回-1,好比是查数据索引,索引不存在。源码返回-1
回复 使用道具 举报
dubei1993 来自手机 中级黑马 2016-6-16 00:47:58
16#
善良的死神达乐 发表于 2016-6-15 22:30
首先我们要知道,程序运行是以补码的形式存在的,当byte读到文件的中间时,很有可能出现11111111的情况,而且 ...

我请问你在哪里看到的这些?感觉不太对,文本中存储的都是汉子或字符,都要编码后读入内存的。。怎么会有11111111这样的东西?如果文本文件中有-1,因为读取一般为1024字节。你说的read()一次读取一个字节时返回值是null才退出的。。
回复 使用道具 举报
善良的死神达乐 发表于 2016-6-15 22:35
首先我们要知道,程序运行是以补码的形式存在的,当byte读到文件的中间时,很有可能出现11111111的情况,而且 ...

呃。。。越说越懵~
回复 使用道具 举报
dubei1993 发表于 2016-6-16 00:47
我请问你在哪里看到的这些?感觉不太对,文本中存储的都是汉子或字符,都要编码后读入内存的。。怎么会有 ...

a.int read(byte[] b)                                                                一次读取一个字节数组       
        (用 int 类型接收是因为 byte 类型中会出现-1的情况,导致后面无法继续读取,int 类型会在前面补上24个0,不会出现-1的情况)
        b.write(byte[] b)                                                                        一次写出一个字节数组
        c.available()                                                                                获取读的文件所有的字节个数
        弊端:有可能会内存溢出
read()方法读取的是一个字节,为什么返回是 int,而不是 byte
        a.因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回 byte,有可能在读到中间的时候遇到111111111
                那么这11111111是 byte 类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用 int 类型接收,如果11111111会在其前面补上
                        24个0凑足4个字节,那么byte类型的-1就变成 int 类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型
回复 使用道具 举报

教材上就是这样说的啊!很好理解啊!为什么会懵????
回复 使用道具 举报
善良的死神达乐 发表于 2016-6-16 22:24
教材上就是这样说的啊!很好理解啊!为什么会懵????

教材是什么鬼?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马