理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,

本文主要是介绍理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,BufferedInputStream 和 BufferedOutputStream, BufferedReader 和 BufferedWriter,转换流

/*
* 1、理解 "流" ?
* 动态性、连续性、方向性。
*
* 2、在java语言中,将数据的输入/输出称之为 IO流。 IO流的分类:
* 1) 从方向分: 输入流 , 输出流。 (参照计算机的内存)
* 将数据送到内存中去称之为输入流。反之,称之为输出流。
*
* 2) 从处理单位来分: 字节流(8位二进制数据), 字符流(16位二进制数据)。
*
* 3) 从是否有数据源来分: 节点流(有数据源), 处理流(必须套在节点流上)。
*
* 3、在Java语言中,所有流类均来自 java.io.* 包。且所有流类均继承自四个抽象的类。
* 1) InputStream 抽象的字节输入流类。
* 2) OutputStream 抽象的字节输出流类。
*
* 3) Reader 抽象的字符输入流类。
* 4) Writer 抽象的字符输出流类。
*
*
* 4、InputStream 抽象的字节输入流类的特性:
* 1) 功能: 它以字节的方式来读取数据。
*
* 2) 提供的抽象方法:
* int read(); 用来读取一个字节,反馈这个字节对应的整数。因此,这个整数的范围为[0, 255];由2^8-1得来
* 当它反馈的是一个 -1 时,表明读取完毕。
*
* void close(); 用来关闭输入流,释放所点资源,确保安全。
*
* int read(byte[] b1); 用来读取多个字节数据并存放到b1数组中,反馈读取的总字节数。
*
* 3) 它针对文件操作的子类有: FileInputStream(文件的字节输入流类)。
*
* 5、FileInputStream类的特性:
* 1) 功能:它用来以字节方式读取指定文件的内容。
* 2) 常用方法:
* int read(); 用来读取一个字节,反馈这个字节对应的整数。因此,这个整数的范围为[0, 255];
* 当它反馈的是一个 -1 时,表明读取完毕。
*
* void close(); 用来关闭输入流,释放所点资源,确保安全。
*
* int read(byte[] b1); 用来读取多个字节数据并存放到b1数组中,反馈读取的总字节数。
*
* 3) 通过案例理解并掌握FileInputStream类的应用(重点)。
*
* 6、OutputStream抽象的字节输出流。
* 1) 功能:它用来以字节方式输出数据。
*
* 2) 它提供的抽象方法:
* void write( int x ); 将给定的整数以字节方式输出。因此,当给定的整数超出了[0, 255]范围
* 时,则输出会失真。
*
* void flush(); 一次性将缓冲区中滞留的数据输出到目的地。即:确保数据输出成功。
*
* void close(); 关闭输出流,释放所点资源,确保安全。
*
* 3) 它针对文件操作的子类有: FileOutputStream文件的字节输出流类。
*
* 7、FileOutputStream文件的字节输出流类,其特性如下:
* 1) 功能:它将给定的数据以字节方式输出到目的地(文件中)。
*
* 2) 常用方法:
* void write( int x ); 将给定的整数以字节方式输出。因此,当给定的整数超出了[0, 255]范围
* 时,则输出会失真。
*
* void flush(); 一次性将缓冲区中滞留的数据输出到目的地。即:确保数据输出成功。
*
* void close(); 关闭输出流,释放所点资源,确保安全。
*
* 3) 通过案例理解并掌握 FileOutputStream文件的字节输出流类(重点)。
* 注意: 存盘时文件不存在没有关系,它会自动创建。但,它所在路径必须存在且正确。
* 注意: 根目录、子目录; 路径: 绝对路径、相对路径。
*
* 8、将FileInputStream 和 FileOutputStream 两个类结合起来实现文件的复制、粘贴。

*9、Reader 抽象的字符输入流类:
* 1) 功能: 它以字符方式来读取内容。
* 2) 抽象方法:
* int read(); 用来读取一个字符,反馈这个字符对应的整数。因此,这个整数的范围为[0, 65535];
* 当它反馈的是一个 -1 时,表明读取完毕。
*
* void close(); 用来关闭输入流,释放所点资源,确保安全。
*
* 3) 它针对文件操作的子类有: FileReader 文件的字符输入流类。
*
* 通过案例理解并掌握 FileReader文件的字符输入流。
*
* 10、Writer 抽象的字符输出流类:
* 1) 功能: 将给定的数据以字符方式输出。
*
* 2) 抽象方法:
* void write( int x ); 将给定的整数以字符方式输出。只要x不超出[0 , 65535]范围就不会失真。
*
* void flush(); 将缓冲区中的数据一次性输出到目的地。
*
* void close(); 关闭字符输出流,释放所占资源,确保安全。
*
* 3) 它针对文件操作的子类有: FileWriter 文件的字符输出流类。
*
* 通过案例理解并掌握 FileWriter类。
*
* 11、FileReader和FileWriter 文件字符输入/输出流结合可实现文件的复制。
* 注意: 它们只能用来复制文本文件。
*
* 12、缓冲流:
* 1) 出现目的: 提高输入/输出效率。
* 2) 缓冲流有两对:
* a) BufferedInputStream 和 BufferedOutputStream (缓冲的字节输入/输出流)
*
* b) BufferedReader 和 BufferedWriter (缓冲的字符输入/输出流)
*
* 3) 缓冲流属于处理流,使用时必须将其套在节点流。
*
* 4) 为了提高文件复制的速度,我们使用缓冲流。(案例)

*13、转换流: InputStreamReader 和 OutputStreamWriter :

* 1) InputStreamReader 字节转换成字符的一个输入流,最后,以字符方式读取数据。
* OutputStreamWriter 字符转换成字节的一个输出流,最后,以字节方式输出数据。

* 2) 功能: 当给的类型数据与要的类型数据不一致时,需要进行转换。
* 另一个功能: 可以为输入/输出指定字符编码集,从而以指定的字符编码集实现数据存盘管理或读取相应字符编码集的文件。

* 3) 案例1: 通过 FileInputStream类的对象去读取带汉字的文件内容并显示在屏幕时会乱码。
* 如何解决这个问题?
* 答案: 通过InputStreamReader转换流来实现。 或者更换FileInputStream为FileReader类实现读取。

* 4) 案例2:通过FileOutputStream类的对象把汉字存盘到文件中时会失真。
* 如何解决这个问题?
* 答案: 通过 OutputStreamWriter转换流来实现。 或者更换为FileWriter类实现存盘。
*/

这篇关于理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/234708

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是