问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 中的输入输出流问题

发布网友 发布时间:2022-05-12 06:24

我来回答

2个回答

热心网友 时间:2024-02-18 17:19

其实问题很简单,
首先,你要弄清楚 ”字符“和”字节“ 的关系。在java中一个字符是用两个字节表示的。
再看你的ch=fr.read(); 这是从你的文件中读出的一个字节。
System.out.printf(...);方法是向标准输出流打印一个 格式后的 字符串 ,就像C语言的printf函数一样吧ch格式化为一个字符,但是问题出现了java中一个字符是两个字节组成的,而ch只有一个字节有效(int是4个字节的,但是只用了1个字节),这里就存在一个转换的问题了,如过ch是一个英文的话很好说,原样输出(如果你要了解为什么是原样输出的话,你可以在网上去查查ascii编码和unicode编码在字节上的区别,其实很简单)。但是如果是中文的话就不行了,因为中文要用到两个字节才能表示完整的一个字。你现在只有一个字节了,这样%c就不知道格式化为什么字符了(但是肯定这个字符变成了2个字节的。)这样1个汉字就被分解成两个乱码了。方法可以把这个乱码输出到输出流上。
System.out.print((char)ch); 和上面是一个意思,只是方法不一样。

System.out.write(ch); 是向标准输出流输出一个字节。这又有一个难以理解的地方,标准输出流是什么?怎样理解这个标准输出流?(我也不知道怎么很好的解释),标准输出流可以认为是一个字节输出的通道,java中一般这个通道默认是连接在电脑的显示设备上的。(我不专业)你可以把System.out看成是一个容器,他可以存储字节。你向它里面可以输入字节。如果你的标准输出流终端是控制台(DOS)。你就可以想象成控制台有一个字节存储的容器。控制台可以把容器中的字节表达出来,比如java的unicode编码的字节,他会把每连个字节组合成的一个字符打印出来我们就可以看到这个字符了。这样要显示什么就直接向这个容器中输入什么字节。
真实由于这种原因System.out.write(ch);这个方法可以像你那样输出汉字。一个汉字两个字节,这个方法一次可以向控制台输入一个字节,但是这两个字节最终都会输出到控制台的。因此汉字还是组成了。

上面那两个方法显示乱码的最终原因是:编码被强制改变了。一个汉字被分成了4个字节。
如果你对“把System.out看成是一个容器”有疑惑的话,你可以做一个实验,就用write方法向控制台输出一个汉字,这个汉字两个字节的输入中暂停一下,看看输出第一个字节后和两个字节都输出了控制台打印的是什么。(呵呵 我没试过,如果有什么不一样的地方希望告诉我。。。)

热心网友 时间:2024-02-18 17:20

因为System.out.printf 是每次执行,就打印你传入的变量。
System.out.write 是每次执行遇到\n时才去执行。

而一个汉字需要读取多次(fr.read()),才能组成一个完整的汉字。

因此用printf 时,它直接就打出来了,而汉字需要多次读取才完整,结果就是乱码了
用write ,因为遇到\n才去打印,这样就拼成了汉字,正常打印。

你可以用个byte数组(byte [] data = new byte[1024]),存着每次读过来的ch
最后 String s = new String(data);
这样printf(s) 就可以了
java.io.ioexception是怎么回事

java.io.IOException是Java语言中处理输入/输出操作时所遇到的异常的统称。当系统在进行读、写或其他与输入/输出流相关的操作时出现问题时,就会抛出这个异常。这可能是由于各种原因导致的,如文件不存在、文件权限问题、网络问题、磁盘空间不足等。二、引发java.io.IOException的场景 1. 文件操作:例如,...

JAVA的输入输出流是指的什么啊?

首先,输出目的地是文件IODemo.out,所以最内层包装的是FileWriter,建立一个输出文件流,接下来,我们希望这个流是缓冲的,所以用BufferedWriter来包装它以达到目的,最后,我们需要格式化输出结果,于是将PrintWriter包在最外层。 Java提供了这样一个功能,将标准的输入输出流转向,也就是说,我们可以将某个其他的流设为标准输入...

java中的输入输出流怎么好理解?请各位大侠说的仔细明白一点。我一直搞...

要想让java接收你输入的东西。java必须有能接收你的能力。这个东西就是输入流。就像是小溪一样,水流入到河流中。比如,你输入的字符串,以流的方式流入到java中。这是手动输入字符串。关于文件的输入,同理。java要读取文件,这个文件会以流的方式流入到java中,然后java解析这个输入流。关于输出流,原...

java重定向问题

Java中的重定向问题主要涉及两个方面:输出重定向和输入重定向。明确答案如下:一、Java中的输出重定向:通过改变标准输出流的指向,实现输出信息的重定向。即将程序的输出信息不再直接输出到控制台,而是重定向到其他文件或其他输出流中。二、Java中的输入重定向:将程序的标准输入流重定向到其他来源,例如...

Java中为什么先关闭输出流后关闭输入流?

不绝对,要看依赖关系,先关被依赖的流,谁是被依赖的,就先关谁,比如代码中从文件A读出内容,然后写入文件B , 这个时候读A 要用输入流 ,往B写要用输出流,必须要先从A读出,然后才能往B写,所以,这个场景下,输出流 依赖 输入流,操作完关流的时候就要先关被依赖的输入流,再关输出流。还...

java中的输入输出流该怎么理解

在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛: 标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。将数据冲外存中读取到内存中的称为输入流,将数据从内存写入外存中的称为输出流。

如何理解输入流与输出流概念

东西读入内存就是输入流东西从内存写到记录存储输出流而我们本身就以记录存储为原点所有会有不解的感觉~ java io流按照java io流的方向可以分为输入流和输出流输入流是将资源数据读入到缓冲Buffer中,输出流是将缓冲Buffer中的数据按照指定格式写出到一个指定的位置,所以这两个流一般同时使用,才有意义。

java输入输出流的本质是什么?

NONONO,输入输出流是相对于你的程序说的,也就是站在程序的方向看输入还是输出,例如FileInputStream,Input写入对吧,那么我们站在程序的方向来看,就是源文件指向程序,FileOutputStream,OutPut写出,同理,就是程序指向源文件;再看,FileWriter,writer写,同理,就是程序指向源文件,反之FileReader读,...

java.ioJava流输入输出原理

Java 的输入输出功能强大而灵活,统一抽象为数据流,简化了程序的数据处理。Java 类库中的 IO 部分涵盖了标准输入输出、文件操作、网络数据流、字符串流、对象流和 zip 文件流等内容,分类清晰。根据流向,可以将流分为输入流和输出流。输入流允许程序从中读取数据,而输出流则让程序能向其中写入数据。...

一个关于java输入输出流的问题

==21:37 update== 而且这样改的话,循环里面输出的内容,会被循环外层的dos.writeUTF("over");覆盖掉,也就是最终test.txt文件里只有一行“over”,因为此时循环外的fos和循环内的fos实际上不是一个流。如果在你所贴出来的代码基础上,去掉循环里的dos.close();这句话,那循环里所创建的流是不...

java中输入输出流的知识 java输入流和输出流的区别 下列不是java的输入输出流是 java输入输出流题目 Java的输入输出流包括 输入输出流java java文件输入输出流 java输入输出流总结 java输入输出流复制文件
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
《铁城墙》最新txt全集下载 村庄的秋天_作文 它们的姿态更美:有的昂首怒放,有的含苞欲放……中省略了什么?_百度... 深圳市优思动科技有限公司怎么样? 人工智能ai就业方向及前景 iOS SDK(二):Bundle 创建 & 使用 电脑重装系统之后怎么重装word电脑重装系统后word文件在哪儿 求个300字左右的 令我难忘的一件事 跪求了。马上用。 为什么别人打给我显示暂时无法接通? 保定到成都最省钱路线咨询 宝宝三个月了,最近经常拉肚子,这正常吗? java中的输入输出流该怎么理解 JAVA的输入输出流是指的什么啊? 三个月婴儿拉肚子是怎么回事 java如何使用文件字符输出流FileWriter ? 我的宝宝三个月啦,但总拉肚子,怎么回事啊 小儿三个月 拉肚子 可能由哪些原因引起 java如何使用使用字符输入输出流 ? 日文歌*是“everyday everynight” 有一句“钻石一样的意志”,是虚拟歌姬唱的? ace虚拟歌姬录的歌怎么放抖音 ace虚拟歌姬的版权 同城快递送蛋糕如何下单? ace虚拟歌姬怎么录自己的音 蛋糕同城配送怎么送?选择什么快递公司? 同城蛋糕配送怎么货到付款?怎么订? vivoz3可以玩文明6吗? 文明6能在平板上玩吗 文明6卡顿怎么办? 我姓何,男BB于2012年3月1,8:54出生,五行八字缺什么?取名用哪些属性的字作为第二第三字为好?感谢! 文明6手机版种子和电脑版种子是一样的还是不一样的? 如何使用Java 输出,输出流读写数据 java 输入输出流 Java里那个输入流和输出流怎么用 JAVA中输入输出流和缓冲式输入输出流出有什么区别? 丶用拼音怎么打出来 丶用中文怎么打 建筑资质三级转让怎么转? 丶用拼音怎么打? 丶用搜狗怎么样才能打出来? 丶用86版的五笔 怎么打出来的 教下 丶用智能ABC怎么打 手机什么软件可以修改WiFi密码 吃丶住丶行丶用与网络关系 丶用二根木棒敲的乐器叫什心 手机上可以修改wifi密码吗? 用哪一个软件可以呢? [丶]用搜狗怎么打出来啊、 一个丶在丶非洲丶异国他乡丶的丶少年丶我丶留下了,给丶印象丶深刻丶用词语造 易经是智慧丶懂得大道智慧丶做人做事丶行事丶处事丶用大道智慧的解决方法丶去指方向? 脸盆和洗脚盆为什么要分开? 农村大娘家中洗脚盆,被人发现后重金求购,懵了:这也有人要?