首页 > 其他分享 >第七章-输入和输出流

第七章-输入和输出流

时间:2024-11-10 20:20:11浏览次数:3  
标签:输出 写入 用于 第七章 缓冲区 数据 输入

一、单项选择题

1. File 对象不能用来                                                    【 】

A. 命名文件           B. 查询文件属性           C. 读写文件         D. 处理目录

2. 以下 Java 程序代码中, 能创建BufferedReader对象的是                             【 】

A. BufferedReader in = new BufferedReader( new FileReader("a. dat"));

B. BufferedReader in = new BufferedReader( new Reader("a. dat"));

C. BufferedReader in = new BufferedReader( new FileInputStream("a. dat"));

D. BufferedReader in = new BufferedReader( new InputStream ("a. dat"));

二、填空题

1. 某程序想要随机读写字符文件,能支持这个要求的类是RandomAccessFile。

2. 用于读取字符流的抽象类是 java.io.Reader。

3. Java中,在字节流和字符流之间起到中介作用,充当字节流和读者之间接口的类是InputSteamReader。

三、简答题

1. 完成所有输入/输出操作所需的类都包含于哪个软件包中?

答:java.io:

这个包包含了大量用于文件和流的输入/输出操作的类,如 InputStream、OutputStream、Reader、Writer、FileInputStream、FileOutputStream 等。

常见的类还包括 BufferedReader、BufferedWriter、DataInputStream、DataOutputStream 等,用于处理文件或字节流的数据。

  1. 什么叫作流? 输入/输出流分别对应哪两个抽象类?

答:“流”(Stream)是一种抽象概念,用于表示数据的一系列有序集合,通常是从一个地方流向另一个地方的数据序列。

输入流(Input Stream):

输入流用于从源读取数据,如从文件、网络连接或其他数据源读取。

在Java中,输入流对应的抽象类是 java.io.InputStream。

输出流(Output Stream):

输出流用于向目的地写入数据,如写入文件、网络连接或其他数据目标。

在Java中,输出流对应的抽象类是 java.io.OutputStream。

  1. InputStream有哪些直接子类? 其功能是什么?

答:ByteArrayInputStream:

用于从字节数组中读取数据。

通常用于内存中的数据读取,而不是磁盘上的文件。

BufferedInputStream:

包装另一个输入流,为其提供缓冲功能,从而提高读取效率。

适用于需要频繁读取少量数据的情况,通过预先加载数据到缓冲区来减少磁盘I/O次数。

CheckedInputStream:

用于校验数据流的完整性,通过校验码(如CRC32)来验证数据是否未被篡改。

通常与其他输入流结合使用,提供数据校验功能。

DataInputStream:

提供了从输入流中读取基本数据类型(如int、float等)的方法。

通常用于读取二进制数据,提供了比 InputStream 更高级别的数据读取能力。

FileInputStream:

用于从文件系统中的文件读取数据。

是最常见的文件输入流之一,用于读取文件内容。

FilterInputStream:

是一个抽象类,用于包装其他输入流,并提供额外的功能或改变行为。

本身并不直接使用,而是作为其他过滤输入流(如 BufferedInputStream)的基础类。

ObjectInputStream:

用于反序列化对象。

从输入流中读取对象的状态,并恢复成对象的形式。

PipedInputStream:

与 PipedOutputStream 配合使用,用于线程间的数据通信。

数据可以从一个线程通过 PipedOutputStream 发送到另一个线程的 PipedInputStream。

SequenceInputStream:

用于合并多个输入流的数据。

当需要将多个输入流的数据顺序连接起来时使用。

  1. OutputStream有哪些直接子类? 其功能是什么?

答:ByteArrayOutputStream:

用于将数据写入到内存中的字节数组。

通常用于创建临时数据结构或在内存中处理数据,避免磁盘I/O。

BufferedOutputStream:

包装另一个输出流,为其提供缓冲功能,从而提高写入效率。

适用于需要频繁写入少量数据的情况,通过预先将数据缓存起来再一次性写入目标,减少磁盘I/O次数。

CheckedOutputStream:

用于校验数据流的完整性,通过校验码(如CRC32)来验证数据是否未被篡改。

通常与其他输出流结合使用,提供数据校验功能。

DataOutputStream:

提供了向输出流中写入基本数据类型(如int、float等)的方法。

通常用于写入二进制数据,提供了比 OutputStream 更高级别的数据写入能力。

FileOutputStream:

用于向文件系统中的文件写入数据。

是最常见的文件输出流之一,用于写入文件内容。

FilterOutputStream:

是一个抽象类,用于包装其他输出流,并提供额外的功能或改变行为。

本身并不直接使用,而是作为其他过滤输出流(如 BufferedOutputStream)的基础类。

ObjectOutputStream:

用于序列化对象。

将对象的状态写入输出流,以便以后可以恢复成对象的形式。

PipedOutputStream:

与 PipedInputStream 配合使用,用于线程间的数据通信。

数据可以从一个线程通过 PipedOutputStream 发送到另一个线程的 PipedInputStream。

PrintStream:

提供了类似于 System.out 的功能,用于格式化输出文本。

可以将输出定向到文件、控制台或其他输出流。

  1. 使用缓冲区输出流的好处是什么? 为什么关闭一个缓冲区输出流之前,应使用 flush()方法?

答:使用缓冲区输出流(如 BufferedOutputStream)的好处主要有以下几点:

提高性能:

缓冲区输出流内部维护了一个缓冲区,当写入数据时,数据首先写入缓冲区而不是立即写入目标(如磁盘)。当缓冲区满或者显式调用 flush() 方法时,才会将缓冲区中的数据写入目标。

这种机制减少了磁盘I/O操作的次数,因为磁盘I/O操作相对较为耗时,使用缓冲区可以显著提高写入速度。

减少系统资源消耗:

由于减少了磁盘I/O操作的频率,因此降低了系统的开销,节省了系统资源。

简化编程模型:

缓冲区输出流使得程序员可以专注于数据的逻辑写入,而不必关心底层的实际写入细节。

为什么关闭一个缓冲区输出流之前,应使用 flush() 方法?

当使用 BufferedOutputStream 或其他带有缓冲机制的输出流时,在关闭流之前调用 flush() 方法是非常重要的,原因如下:

保证数据完整写入:

如果在关闭流之前没有调用 flush() 方法,那么缓冲区中剩余的数据将不会被写入目标。这意味着部分数据可能会丢失。

避免数据不一致:

如果程序在没有调用 flush() 方法的情况下突然终止(例如,由于异常或系统崩溃),那么缓冲区中的数据就无法写入目标,导致数据不一致的问题。

  1. 读者和写者的作用是什么?

答:在Java中,Reader 和 Writer 是处理字符流(character streams)的抽象基类,它们主要用于处理文本数据。Reader 用于读取字符流,而 Writer 用于写入字符流。

  1. 什么叫作对象的序列化? 如何实现对象的序列化?

答:对象序列化(Serialization)是指将对象的状态(即其属性值)转换为一种可以持久保存或通过网络传输的形式的过程。序列化后的对象通常表现为字节流形式,可以保存到文件中、存储在数据库中或通过网络传输。

四、程序设计题

1. 实现一个输入程序,接收从键盘读入的字符串。当字符串中所含字符个数少于程序设定的上限时,输出这个字符串; 否则抛出 MyStringExceptionl 异常,在异常处理中要求重新输入新的字符串或中断程序运行。

2. 利用输入/输出流编写一个程序,实现文件复制的功能。程序的命令行参数的形式及操作功能均类似于 DOS中的 copy命令。

3. 利用输入/输出流及文件类编写一个程序,显示指定文本文件的内容。程序的命令行参数的形式及操作功能均类似于DOS中的 type命令,同时能够显示文件的有关属性,如文件名、路径,修改时间、文件大小等。

标签:输出,写入,用于,第七章,缓冲区,数据,输入
From: https://blog.csdn.net/qq_43601339/article/details/143645912

相关文章

  • 第 5 章:格式化输出-Claude应用开发教程
    更多教程,请访问:Claude开发应用教程设置运行以下设置单元以加载您的API密钥并建立get_completion辅助函数。!pipinstallanthropic#Importpython'sbuilt-inregularexpressionlibraryimportreimportanthropic#RetrievetheAPI_KEY&MODEL_NAMEvaria......
  • Python中输入和输出的详细解读
    文章目录一、输入1.input()函数2.eval()函数3.多个变量的输入(1)split()函数(2)map()函数二、输出1.print()函数2.字符串格式化format()方法3.字符串格式化占位符%一、输入1.input()函数input()可以读取用户键盘输入的值,并以字符串的形式赋值给我们随意定义的变量中......
  • 字符串和数据输入
     字符串三种定义方法单引号定义法,可以内含双引号双引号定义法,可以内涵单引号可以使用转移字符(\)来将引号解除效用,变成普通字符串。示例如上字符串的拼接通过+号完成(一般用于字面量和变量或变量和变量之间),只能适用于字符串本身。例如:字符串没有办法通过+和(整数、浮点......
  • spdlog一个非常好用的C++日志库(十): 十六进制输出spdlog::to_hex
    目录1.引言2.spdlog::to_hex用法3.spdlog::to_hex实现原理4.总结1.引言    在平时调试网络程序时,多数都会用到wireshark抓包工具,在查看某个包的数据都是按照下面这样格式显示的:那么它是怎么做到的呢?其实spdlog的to_hex也能做到这一点,下面就来介绍它的用法和原......
  • 输入法双拼方案哪个好?
    常见的双拼方案有:小鹤双拼、微软双拼、自然码等,智能ABC,拼音加加,紫光双拼,国标双拼,甚至可以自定义方案。本文会简单介绍下各个方案,让读者参考。‍各输入法支持情况有位UP主做了一张图:可以几乎所有输入法都支持微软双拼,此外小鹤双拼和自然码的支持率也很高。‍选择哪一款......
  • LeetCode 3014[输入单词需要的最少按键次数I]
    题目链接LeetCode3014[输入单词需要的最少按键次数I]详情实例实例1实例2提示题解思路一圈下来8个字母,每个字母按1次二圈下来16个字母,前8个字母每个按1次,后8个字母,每个按2次三圈下来24个字母,前8个字母每个按1次,中间8个字母,每个按2次,最后8个字母,每个按3次四圈下来......
  • 【MATLAB源码-第212期】基于matlab的8PSK的log-map软解调仿真,输出误码率曲线和星座图
    操作环境:MATLAB2022a1、算法描述1.8PSK调制和解调系统8PSK(8相位移键控)是一种数字调制技术,它通过改变载波信号的相位来传输数据。在这个系统中,我们将介绍8PSK的工作原理、调制过程、信道模型、解调过程,特别是log-MAP软解调的实现。1.18PSK调制的基本原理8PSK调制的基本......
  • C++输出奇特的三角形
    题目描述请根据下列规律输出奇特的图形,是一个被*包围了的@三角形n=3**@***@@@*@@@@@输入输入一个整数(3<=n<10)输出输出n行的图形样例输入 3样例输出 **@***@@@*@@@@@#include<iostream>usingnamespacestd;intmain(){ intn,j=1,t=0; cin>>n;......
  • c++-有关输出、信息输入、趣味输入应用、运算符、变量、浮点数数据类型的基础知识
    C++是一种功能强大且广泛使用的编程语言,它可以用于开发各种类型的应用程序。在这篇文章中,我们将介绍C++程序的输出、信息输入、趣味输入应用、运算符、变量和浮点数数据类型的基础知识。目录输出信息输入趣味输入应用运算符变量浮点数数据类型题目题目1:解答1:题目2:......
  • Vue3 - 详细实现将多个文件批量导出为ZIP压缩包格式并下载功能,vue3将文件批量下载打包
    前言Vue2版本,请访问这篇文章。在vue3|nuxt3项目开发中,详解实现把多个文件组合成一个ZIP压缩包格式下载到用户本地,将文件批量下载打包成zip格式并自定义压缩包命名名称,vue3批量下载文件并导出为压缩包的功能,如何将后端返回的二进制文件流打包成zip格式,支持任意文件......