我要崩溃了,超高分求助!
我要崩溃了,超高分求助!关于输入输出流的具体详细的问题,烦请高人指点一二,则在下不胜感激,不对,简直是感激涕零,无以为报,生当殒首,死当结草,难报大恩之万一。
输入输出流,尤其是字符流和字节流的区别到底是什么?我看书看的都快要自杀了,还是高不清楚。究竟字符流和字节流处理文件的详细过程是怎么回事?Java用unicode来存贮字符,意思是不是说所有定义的变量,它们所引用的值在内存中都是用unicode来存贮的?那本地计算机编码又是怎么回事?比如我定义了一个int i=127;是不是说它在内存中是以0000 0000 0111 1111的形式存在?字节流既然是直接将内存中的数据写入文件,那用字节流把它写入文件之后,是不是编码仍然为0000 0000 0111 1111?而用字符流的话就变成了
0000 0001
0000 0010
0000 0111
呢?那既然这样,System.out.println(i);out是字节流PrintStream的对象,那应该属于字节流了,可是为什么这句话输到屏幕上的仍然是我们能够看懂得字符127呢?应该是乱码的呀?用字符流读取一个以前用字节流写得文件及用字节流读取一个以前用字符流写的文件,到底会有什么过程?请高手帮帮我,真是太痛苦了。回答的兄弟请注意,千万不要说什么找本书去看懂了再问这种话,我真是看不懂了。回答的好的兄弟,在下一定会尽量给出最高的分数和最大的感激。谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!
问题点数:100、回复次数:30Top
1 楼asmetoyou()回复于 2006-11-07 09:19:50 得分 0
很想帮楼主,不过我也不清楚,帮顶了
顺便学习Top
2 楼nccxl(小猪的狗熊)回复于 2006-11-07 09:31:25 得分 0
我的认为是:字节流或字符流,存储方式都是数组。字符流保存再字符数组中,字节流保存再字节数组中,这个是数组定义的问题。应该和乱码什么的没有关系。Top
3 楼piaopiao11()回复于 2006-11-07 10:42:38 得分 0
PrintStream中println(int i)方法这样写的
public void print(int i) {
write(String.valueOf(i));
}
int是转化为String来输出的Top
4 楼zhaojiuchunlai(帮助大家是我的福气)回复于 2006-11-07 10:50:55 得分 0
看楼主这么痛苦!!!!
帮顶了!!!Top
5 楼angelleecash(失学儿童)回复于 2006-11-07 11:43:29 得分 0
下面是我的理解,不对不许骂人
我认为你的问题有两个方面
1是 class文件本身的格式
要想知道CLASS文件的格式及其细节,可以去看深入研究JAVA虚拟机,我正在看这个,知道的不多,不能胡说.帮不了你.
2是你sourcecode里面的字符的格式问题
有这样的一个流程,源代码-class文件-JVM-解析CLASS-操作系统-执行结果
我看过网上一些关于编码方式的文章,应该就是这个意思
主要是针对汉字的编码会引起问题,这里面涉及到了UTF-8,GB2312等常用的编码方式,我知道的就这么多,希望能够抛砖引玉
再次重申,如果是交流,欢迎批评指正,大家注意素质,不要上来就骂人.Top
6 楼hdhmail2000(禅剑飞雪)回复于 2006-11-07 11:48:23 得分 0
多去实践吧,有的东西不好说清楚的
多做了就能领会到,即使一下子不明白,也应该继续往下看,后面你就会知道领悟到的。
而不是卡着郁闷
楼主加油Top
7 楼hdhmail2000(禅剑飞雪)回复于 2006-11-07 11:53:14 得分 0
字节流--处理单元为1个字节,操作字节和字节数组。所有的InputStrem和OutputStream的子类都是。
字符流--处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串
通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联
在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的Top
8 楼FreeSeagull(蓝天,白云,松花江)回复于 2006-11-07 12:41:04 得分 0
OutputSteamWriter构造的时候可以指定编码,如果你是使用不带编码的构造函数来构造这个writer,默认的编码为UTF-8。127的UTF-8编码是(0001 0010 0111), 相应的字符流就是你看到的那个。Top
9 楼hsduren()回复于 2006-11-07 12:43:58 得分 0
你的问题回答如下:
先要理解流的概念,所谓流就是不断的流出0或者1,所以他是乱七八糟的,那怎么办,java提供I/O流的方式对他进行格式化,比如最基本的 InputStream就是这些把01 八个一组,进行读入,也就是 恰好一个字节,所以他一次要么读8个要么不读。那么字符流当然就是一次读16个01
。那么什么情况下用字节流,什么情况下用字符呢?一般是文本文件我们用字符流,这样快。但如果是图象这样的文件,如果是按照字符流来读写就可能会漏掉数据,具体原因是:一般的图象文件是按字节存储的,如果按字符流来处理,比如换行符(\n)就会自动过滤掉,而代表\n的那几个01在图象里面就不是什么换行,而是他的数据内容,所以遗漏就造成了。
由此也可以看出,任何情况下我们采用字节格式化流方式都不会遗漏数据。
至于你所说的unicode问题,什么乱码这显然是不会的,因为中间还有jvm,他给你做了很多事情,你只要在逻辑概念上理解就可以了,他在内寸里面具体怎么实现,有点复杂,比如float,就由s m e三部分组成,比较复杂。Top
10 楼lbfhappy(千里冰封)回复于 2006-11-07 14:04:47 得分 0
楼上的解释不错,
对于IO,其实我们也可以看看API的说明的Top
11 楼lulu123ma(抵制虚黄,支持实黄(扫黄现状))回复于 2006-11-07 14:43:57 得分 0
基础贴,偶不会,留名Top
12 楼zhuixun5506(>> narsil)回复于 2006-11-07 14:45:12 得分 0
thinking in Java中讲的很清楚的,看看说不定会有收获的。。。Top
13 楼allright_flash()回复于 2006-11-07 14:50:04 得分 0
┌──┐
│好贴│ ╭───────╮
└──┘ ┏━━━━━━━┓ │ 既然有分, │
┏┓ ┏┫ |||┣┓∠ 这贴就顶了 │
┣┫ ┗┫━━ ┃ ━━┣┛ ╰───────╯
┏┳┫┣┳┓ ┃ ━━━━━ ┃
┃ ┃ ┗━━━┳━━━┛
┗━━━━┻━━━━▇▇▇┛ ()000o
┃ ┃ (````)
┃ ┃ )``/
┛ ┗━━(__/Top
14 楼starrygis()回复于 2006-11-07 17:46:25 得分 0
顶!Top
15 楼theforever(碧海情天)回复于 2006-11-07 18:03:49 得分 0
呵呵,楼主的描述还真透着要崩溃的情绪啊,搞得我没法看完问题,只能说:千万要冷静哦Top
16 楼jicken_woo(黑夜里你留下的轮廓,指引我-------不寂寞---------------)回复于 2006-11-07 18:30:00 得分 0
扶樓主一下。呵呵
隨便學習一下。Top
17 楼XXKKFF(齐次边界条件有界弦自由振动方程混合问题的分离变量法-_-!!!)回复于 2006-11-07 18:47:16 得分 0
很好Top
18 楼zhaoyue_ruc()回复于 2006-11-07 18:59:09 得分 0
我也学习一下Top
19 楼argenCHN(【夷不谋夏,胡不乱华】)回复于 2006-11-07 19:02:41 得分 0
jf
bang dingTop
20 楼BlakeMaster()回复于 2006-11-07 19:08:52 得分 0
顶Top
21 楼shenyang523()回复于 2006-11-07 19:27:45 得分 0
学习了Top
22 楼shanshuiboy()回复于 2006-11-07 20:53:34 得分 0
超强帮顶!!!!Top
23 楼silence_dai(沉默的鱼)回复于 2006-11-07 23:49:57 得分 0
我觉得字节流读出的是2进制码,但因为处理的最小的单位是byte,就好像是8位一样了
总之从字节流读出的代码本身没有任何意义的,当你使用正确的方式取重新组织这个流才会得到想要的结果,所以不会有细节的丢失
而字符流是当作双字节的字来读的,当读的东西不构成字的时候可能回出错,比如用字符流读图像文件或是音乐文件,再把这个流重组成图像或音乐有可能会出现错误.
最终结论:文本类文件用字符流,其它的用字节流Top
24 楼terranhao()回复于 2006-11-08 08:49:42 得分 0
久而久之你自然就明白了,当初我也是这样,不要慌,可以扔下不管,哈哈Top
25 楼longlegThy(长腿叔叔)回复于 2006-11-08 09:14:08 得分 0
先回复,后拜读Top
26 楼allright_flash()回复于 2006-11-08 09:41:24 得分 0
先看看,好像很难的,Top
27 楼sunplayer()回复于 2006-11-08 10:12:54 得分 0
这个问题确实很头痛,当初我也想了很久后来看了http://www.xxlinux.com/linux/article/development/soft/20060626/2158.html这东西明白了点
主要是别把这个想得太复杂了。要写出去就是output,要读就是input,至于具体的方法和格式都靠自己定和实际情况了确定。Top
28 楼windproof(windproof)回复于 2006-11-08 11:24:16 得分 0
一起学习!顶!Top
29 楼jobs002(Oh! Office)回复于 2006-11-08 12:03:01 得分 0
分Top
30 楼tywyn()回复于 2006-11-08 14:31:13 得分 0
我也不明白这个问题,看了众位的回复明白了不少,thankyouTop




