第11周 预习、实验与作业:流与文件

徐彬晶 网络21级 2022-11-05 16:32:05

1、程序可以处理的数据来源除了文件还有哪些?对不同的数据来源共同的操作是什么?

答:还可以是文件、内存或网络等;将数据读入程序之中。

2、将对不同数据源中数据的读写抽象为对流的读写,有什么好处?

答:屏蔽了实际的I/O设备中处理数据的细节,使得输出输入独立于设备。

3、二进制文件与文本文件有什么区别?字节流与字符流之间有什么关系?为什么有的文本文件打开会乱码?怎么解决?

答:

1>二进制文件和文本文件的区别:

①能存储的数据类型不同:文本文件只能存储char型字符变量。二进制文件可以存储char/int/short/long/float……等变量类型;

②每条数据的长度不同:文本文件每条数据通常是固定长度的,以ASCII为例,每条数据(每个字符)都是1个字节。二进制文件每条数据不固定,如short占两个字节,int占四个字节,float占八个字节……;

③读取的软件不同:文本文件编辑器就可以读写,比如记事本、NotePad++、Vim等。二进制文件需要特别的解码器,比如bmp文件需要图像查看器、rmvb需要播放器等;

 

2>字节流和字符流之间的关系:

所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列。

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
 

3>为什么有的文本文件打开会乱码?怎么解决?

:因为字节流按字节读取,因为再遇到汉字这类一个字占两个字节的时候,可能会出现乱码现象,因此需要依靠字符流来解决

4、字符与字节之间的关系是什么?尝试使用Visual Studio Code的Hex Editor插件打开一个文本文件。在文本文件中输入"123abc中文"。观察:一个英文字符占几个字节,一个中文字符占用几个字节。在Java程序中,使用字节流怎么将这个文件中的数据正确读取并组装起来。

答:1>字符与字节之间的关系:

①字节的定义:字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位

②字符的定义:字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。

③二者关系:

ASCII码中:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

UTF-8编码中:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

Unicode编码中:一个英文字符等于两个字节,一个中文(含繁体)等于两个字节。
      符号:英文标点占一个字节;中文标点占两个字节。
      举例:英文句号“.”占1个字节的大小;中文句号“。”占2个字节的大小。

UTF-16编码中:一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

UTF-32编码中:世界上任何字符的存储都需要4个字节

5、有一个stus数组,里面有若干Student对象(String name, int age, boolean gender, double score)。要将这些对象高效率地存储到文件中,需要使用哪些流?使用二进制流与使用字符流将这个数组存储到文件有何不同?使用二进制流与使用字符流从文件中读取并组装成对象有何不同?

 答:1>FileOutputStream文件流,BufferedOutputStream缓冲流,ObjectOutputStream字节流;

2>文本流是指在流中流动的数据是以字符的形式出现的。流中的每一个字符对应一个字节,用于存放对应的ASCII码值,因此文本流中的数据可以显示和打印出来,都是用户可以读懂的信息。二进制流中的字节将完全根据程序编写它们的形式写入到文件或者设备中,而且完全根据它们从文件或者设备读取的形式读入到程序中;

3>编码层次上有所不同,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等;二进制流是值编码

6、使用什么类可以对文件进行随机存取?读写的单位是什么?为什么不是字符呢?

 答:RandomAccessFile类;字节;RandomAccessFile类实现了DataInput、DataOutput两个接口,可以将byte数组转换成字符型。

 

...全文
60 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-IT工具 发布问题, 以便更快地解决您的疑问

4,027

社区成员

发帖
与我相关
我的任务
社区描述
为初学Java的大学生提供一个学习、交流的社区。 社区包括:技术文章、学习任务、在线课程、在线编程练习。
javajava-eeeclipse 高校
社区管理员
  • zhrb
  • 驼同学.
  • 兰翔呀
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

社区板块说明:
1. Java技术:包含Java技术的各种新闻、文章。
2. 教学频道:包含Java基础技术与Java教学中常用的一些文章。建议初学者、在线学习的同学在这里交流、提问、浏览课程学习相关文章。
3. 学习任务:老师发布的教学任务。
4. 其他技术:其他技术文章。

社区链接说明:
1. 在线学习:本社区对应的在线课程(免费学习)。
2. 编程练习:本社区使用的在线编程练习平台(加入在线课程后,免费练习)。
3. 项目实例:一个简单的Java项目示例。
 

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