第九章IO流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
IO 是什么意思? data source 是什么意思?
IO:输入输出
data source:数据源

字节流和字符流有什么区别?输入流和输出流有什么区别?
IO流分类

1、按流向 : 输入流 输出流

2、按数据: 字节流:二进制,可以传输一切文件类型

字符流:只能处理纯文本文件

3、按功能: 节点流:包裹源头

功能流:增强功能,改善性能

字节流与字符流常用方法:

1、字节流

输入流:InputStream  read(byte[] b)  read(byte[] b, int off,int len)  close()

FileInputStrea()

输出流:OutputStream  write(byte[] b) write(byte[] b, int off,int len) flush() close()

FileOutputStream()

2、字符流

输入流:Reader  read(char[] cbuf)  read(char[] cbuf,int off,int len)  close()

FileReader()

输出流:Writer  write(char[] cbuf)  write(char[] cbuf,int off,int len) flush() close()

FileWriter()
  
节点流和处理流有什么区别?
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
   节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.
   处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
   JAVA常用的节点流有以下几个:
   文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流。
   字符串 StringReader StringWriter 对字符串进行处理的节点流。
   数 组 ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。
   管 道 PipedInputStream PipedOutputStream PipedReaderPipedWriter对管道进行处理的节点流。
   父 类 InputStream OutputStream Reader Writer

常用处理流(关闭处理流使用关闭里面的节点流)
   缓冲流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter
增加缓冲功能,避免频繁读写硬盘。
   转换流:InputStreamReader OutputStreamReader实现字节流和字符流之间的转换。
   数据流 DataInputStream DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来。
    
word 文档能使用字符流操作吗?为什么?
不能,纯文本才可以用字符流

流对象使用完后,一般要调用close方法关闭,释放资源。 这种做法对吗?
虽然在字节流当中,操作没有用到缓冲区,所以使用完流之后不写close方法也可以,但是为了规范,最好也要写上。字符流当中,必须使用close方法,否则内容无法输入输出。

InputStream和OutputStream基本特点是?
• Java语言中最基本的两个字节输入输出类。
• 其他所有字节输入输出流类都继承自这两个基类。
• 这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类.

Reader 和 Writer 的基本特点是?
• Java语言中最基本的两个字符输入输出类。
• 其他所有字符输入输出流类都继承自这两个基类。
• 这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类.

FileInputStream 和 OutputStream 的基本作用是?
• 使用FileInputStream读取文件内容
• abstract int read( );
• int read( byte b[ ] );
• int read( byte b[ ], int off, int len );
• int available( );
• close( );
• 使用FileOutputStream写内容到文件
• abstract void write( int b );
• void write( byte b[ ] );
• void write( byte b[ ], int off, int len );
• void flush( );
• void close( );
• 使用FileInputStream/FileOutputStream复制文件

FileReader 和 FileWriter 的作用是?
使用FileReader和FileWriter完成文件复制

BufferInputStream 和 BufferedOutputStream 的特点是?
• BufferedInputStream和BufferedOutputStream是处理流(包装流)
• 读文件和写文件都使用了缓冲区,减少了读写次数,从而提高了效率
• 当创建这两个缓冲流的对象时时,会创建了内部缓冲数组,缺省使用32字节大小的缓冲区.
• 当读取数据时,数据按块读入缓冲区,其后的读操作则直接访问缓冲区
• 当写入数据时,首先写入缓冲区,当缓冲区满时,其中的数据写入所连接的输出流。使用方
法flush()可以强制将缓冲区的内容全部写入输出流
• 关闭流的顺序和打开流的顺序相反.只要关闭高层流即可,关闭高层流其实关闭的底层节点流
• Flush的使用:手动将buffer中内容写入文件

InputStreamReader 和 OutputStreamWriter 的作用是?
• 为处理流
• 用于将字节流转化成字符流,字符流与字节流之间的桥梁
• InputStreamReader的作用是把InputStream转换成Reader
• OutputStreamWriter的作用是把OutputStream转换成Writer
• 存在将字节流转换成字符流的转换流,因为字符流操作文本更简单
• 不存在把字符流转换成字节流的转换流,因为没有必要
• System.in代表标准输入,即键盘输入,是InputStream的实例

PrintStream 打印流经常用于什么情况? System.out 是不是打印流?
• PrintStream提供了一系列的print()和println(),可以实现将基本数据类型格式化成字符串输出。
对象类型将先调用toString(),然后输出该方法返回的字符串
• System.out就是PrintStream的一个实例,代表显示器
• System.err 也是PrintStream的一个实例,代表显示器
• PrintStream的输出功能非常强大,通常需要输出文本内容,都可以将输出流包装成
PrintStream后进行输出
• PrintStream的方法都不抛出IOException

System.out 是打印流,被称作标准的输出流。输出的目的是标准的输出设备,即显示器。

DataInputStream 和 DataOutputStream 的特点是?
• 提供了可以存取所有Java基础类型数据(如:int,double 等)和String的方法。
• 处理流,只针对字节流,二进制文件

中文乱码是怎么造成的?
编码方式与解码方式额设之不当

unicode 字符集是几个字节表示一个字符?为什么需要 utf-8?
2个字节表示一个字符,utf-8是Unicode最重要的实现方式之一。另外还有utf-16、utf-32等。UTF-8不是固定字长编码的,而是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。这是种比较巧妙的设计,如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

序列化和反序列化指的是什么?
• 对象序列化 (Serialization)
• 将Java对象转换成字节序列(IO字节流)
• 对象反序列化 (DeSerialization)
• 从字节序列中恢复Java对象

想序列化某个类的对象,该类必须实现 Serializable 接口吗?
必须
只有实现了Serializable接口的类的对象才可以被序列化。Serializable接口中没有任何的方法,实现该接口的类不需要实现额外的方法;如果对象的属性是对象,属性对应类也必须实现Serializable接口

说说 Serializable 接口的特点
类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。因为实现接口也是间接的等同于继承。序列化接口没有方法或字段,仅用于标识可序列化的语义
transient 的作用是?
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。我们可以将这个引用标记为transient,那么对象仍然可以序列化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值