【Java IO流】IO流详解

参考笔记:【Java基础-3】吃透Java IO:字节流、字符流、缓冲流_javaio-CSDN博客


目录

1.IO流简介

1.1 什么是IO流?

1.2 IO流的分类

1.3 字符流和字节流的其他区别

1.4 Java IO流体系图 

2.字符编码详解

3. Java的char类型与 Unicode、UTF-16 的联系

4.节点流

4.1 字符输入流/输出流——FileReader/FileWriter

5.2 字节输入流/输出流——FileInputStream/FileOutputStream

5.处理流


1.IO流简介

1.1 什么是IO流?

IO,即 Input 、 Output ,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括磁盘文件、管道、网络连接

Java 中是通过流处理 IO 的,那么什么是流?

流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道

Java 程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是磁盘文件、内存、网络连接等等。类似地,当 Java 程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中 "流"动 一样

一般来说关于流的特性有下面几点:

① 先进先出:最先写入的数据会被最先读出

② 顺序存取:可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据

③ 只读或只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流

1.2 IO流的分类

  • 数据的流向分类:输入流和输出流

    • 输入流 :读取外部数据(磁盘、光盘等存储设备的数据)到 Java 程序(内存)中;输入流以 InputStreamReader 结尾

    • 输出流 :Java 程序(内存)数据输出到磁盘、光盘等存储设备中;输出流以 OutputStreamWriter 结尾

  • 数据的操作单位分类:字节流和字符流

    • 字节流 以数据单位为 8 位的字节为单位;字节流以 InputStreamOutputStream 结尾

    • 字符流 以数据单元为 16 位的字符为单位;字符流以 ReaderWriter 结尾

  • 流的功能分类:节点流和处理流

    • 节点流:直接操作数据读写的流类,比如 FileInputStream

    • 处理流:也称为包装流,用来包装节点流,给节点流提供更加强大的读写功能

1.3 字符流和字节流的其他区别

除了操作的数据单位的区别,还有以下区别:

  • 操作的文件类型不同

    • 字符流 :字符流用于处理纯文本类型文件,如 .txt、.cpp、.txt、.java、.c、.cpp、.py 等,不能处理图像、视频等非文本文件

    • 字节流 :字节流可以操作一切类型文件,但通常用来用来处理 .img、.mp3、.mp4、.ppt、.doc 等二进制文件

  • 缓冲区:

    • 字符流:字符输出流本身带有缓冲区(字符输入流好像没有),缓冲区是一个长度为 1024char 类型数组

    • 字节流:没有缓冲区

验证:字符输出流带有缓冲区

查看所有字符输出流的基类 Writer ,如下:

 可以看到,字符输出流自带的缓冲区确实是一个长度为 1024 的 char 类型数组 writeBuffer 

1.4 Java IO流体系图 

为了更好的阅读体验,建议大家对字符编码、Javachar 类型有比较深的了解

2.字符编码详解

        链接如下:

【字符编码】详解ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16、UTF-32_gbk解码-CSDN博客文章浏览阅读966次,点赞27次,收藏22次。相信大家都遇到过打开一个文本文件然后出现乱码的情况,经典的"锟斤拷"乱码(bushi),如下:没在深夜见过"锟斤拷"的人,不足以语人生...好了回归正题,乱码到底是怎么来的呢?知名乱码"锟斤拷"又为何如此常见?不着急,要理解乱码,首先需要知道计算是如何存储为文字的:学过计算机的都知道,计算机只能存储0、1这两个二进制数,无论是文本文件里的数字、字母、汉字标点符号控制字符emoji😈👴等都需要用某种方式转换成二进制数字进行存储,需要的时候再读出来。_gbk解码 https://blog.csdn.net/m0_55908255/article/details/147335974?spm=1011.2415.3001.5331        字符编码主要内容包括 : 

        ① 字符集、编码编码介绍

        ② ASCII字符集 + 编码

        ③ GB2312字符集 + 编码

        ④ GBK 字符集 + 编码

        ⑤ Unicode 字符集

        ⑥ Unicode 字符集的三种编码方案:UTF-32、UTF-16、UTF-8

        ⑦ 乱码的本质原因

3. Java的char类型与 Unicode、UTF-16 的联系

         链接如下:

【字符编码】Java的char类型与Unicode、UTF-16的联系-CSDN博客文章浏览阅读921次,点赞16次,收藏24次。本文是上一篇博文的续篇:https://blog.csdn.net/m0_55908255/article/details/147335974?sharetype=blogdetail&sharerId=147335974&sharerefer=PC&sharesource=m0_55908255&spm=1011.2480.3001.8118https://blog.csdn.net/m0_55908255/article/details/147335974?sharetype=blogdetail&sh https://blog.csdn.net/m0_55908255/article/details/147430863?spm=1011.2415.3001.5331        主要内容包括 : 

        ① Java 的 char 类型底层设计

        ② Java 中关于 Unicode 的常用 API

        ③ 编码和解码

        ④ 乱码问题

4.节点流

4.1 字符输入流/输出流——FileReader/FileWriter

          链接如下:

【Java IO流】字符输入流FileReader、字符输出流FileWriter-CSDN博客本文讲解的是两个比较重要的节点流,也是两个比较重要的字符流。即字符输入流FileReader、字符输出流FileWriterJava IO作用:将磁盘文本文件的数据读取到Java程序(内存)中作用:将Java程序(内存)中的字符写入到磁盘文件中。 https://blog.csdn.net/m0_55908255/article/details/147529309?sharetype=blogdetail&sharerId=147529309&sharerefer=PC&sharesource=m0_55908255&spm=1011.2480.3001.8118        主要内容包括 : 

        ① FileReader 构造器、常用方法

        ② FileReader 读取文件案例演示

        ③ FileWriter 构造器、常用方法

        ④ FileWriter 写入文件案例演示

        ⑤ FileReader + FileWriter 拷贝文本文件

5.2 字节输入流/输出流——FileInputStream/FileOutputStream

           链接如下:

【Java IO流】字节输入流FileInputStream、字节输出流FileOutputStream-CSDN博客本文讲解的是两个比较重要的节点流,也是两个比较重要的字节流。即字节输入流、字节输出流Java IO作用:从磁盘文件中读取字节数据Java程序(内存)中作用:将字节数据 从Java程序(内存) 写入到磁盘文件。 https://blog.csdn.net/m0_55908255/article/details/147540602?sharetype=blogdetail&sharerId=147540602&sharerefer=PC&sharesource=m0_55908255&spm=1011.2480.3001.8118        主要内容包括 : 

        ① FileInputStream 构造器、常用方法

        ② FileInputStream 读取文件案例演示

        ③ FileOutputStream 构造器、常用方法

        ④ FileOutputStream 写入文件案例演示

        ⑤ FileReader + FileWriter 拷贝文件

5.处理流

此部分讲解 3 个处理流:缓冲流转换流序列化流,再加 标准输入\输出流

            链接如下:

【Java IO流】处理流之缓冲流、转换流、序列化流、标准输入\输出流-CSDN博客文章浏览阅读75次。本文讲解的是3个处理流 + 标准输入\输出流,内容比较枯燥缓冲字节流:缓冲字符流:BufferedReader、BufferedWriterJava IO节点流可以从一个特定的数据源读数据或写数据,比如节点流可以从文件读取数据到Java程序中,节点流可以将Java程序中的数据写入文件,这两个结点流的数据源都是磁盘文件,如下所示:那处理流是什么东西呢?处理流也叫包装流,是连接(包装)在节点流之上的流,为节点流提供更为强大的读写功能上图中很形象地描绘了节点流和处理流的关系。 https://blog.csdn.net/m0_55908255/article/details/147543826?spm=1011.2415.3001.5331        主要内容包括 : 

        ① 缓冲字节流 BufferedInputStram、BufferedOutputStream 的原理、使用案例、与普通字节流的效率对比

        ② 缓冲字符流 BufferedReader、BufferedWriter 的原理、使用案例、与普通字符流的效率对比

        ③ 转换流 InputStreamReader、OutputStreamWriter 的引入、作用、使用案例

        ④ 序列化流 ObjectInputStream、ObjectOutputStream 的原理、作用、使用案例

        ⑤ 标准输入\输出流 System.in 、System.out

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

驱动开发系列56 - Linux Graphics QXL显卡驱动代码分析(三)显示模式设置

一:概述 如之前介绍,在qxl_pci_probe 中会调用 qxl_modeset_init 来初始化屏幕分辨率和刷新率,本文详细看下 qxl_modeset_init 的实现过程。即QXL设备的显示模式设置,是如何配置CRTC,Encoder,Connector 的以及创建和更新帧缓冲区的。 二:qxl_modeset_init 分析 in…

Vue3开发常见性能问题知多少

文章目录 1 常见性能优化瓶颈及原因1.1 响应式数据的过度使用1.2 虚拟 DOM 的频繁更新1.3 组件渲染的冗余1.4 大列表渲染的性能问题1.5 计算属性和侦听器的滥用1.6 事件处理函数的频繁绑定1.7 异步组件的加载性能2 解决方案与优化技巧2.1 合理使用响应式数据2.2 优化虚拟 DOM 更…

Rust Ubuntu下编译生成环境win程序踩坑指南

前言: 1,公司要给一线搞一个升级程序,需要在win下跑。 之前都是找开发总监帮忙,但是他最近比较忙。就让我自己搞。有了下文.。说来惭愧,之前写过一篇ubuntu下编译windows的文章。里面的demo就一句话 fuck world。依赖…

openharmony 4.1 运行busybox工具包(保姆教程)

1.下载 链接:Index of /downloads/binaries 进入其中后,找到 挑选适合你系统架构的版本,例如我这边是 https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-armv7r 右键复制链接 打开迅雷,直接粘…

算法四 习题 1.3

数组实现栈 #include <iostream> #include <vector> #include <stdexcept> using namespace std;class MyStack { private:vector<int> data; // 用于存储栈元素的数组public:// 构造函数MyStack() {}// 入栈操作void push(int val) {data.push_back…

GD32F407单片机开发入门(十七)内部RTC实时时钟及实战含源码

文章目录 一.概要二.RTC基本特点三.GD32单片机RTC内部结构图四.配置一个RTC走秒例程五.工程源代码下载六.小结 一.概要 RTC&#xff08;Real-Time Clock&#xff09;是一种用于追踪和记录实际时间的时钟系统。RTC模块提供了一个包含日期&#xff08;年/月/日&#xff09;和时间…

新能源汽车运动控制器核心芯片选型与优化:MCU、DCDC与CANFD协同设计

摘要&#xff1a;随着新能源汽车产业的迅猛发展&#xff0c;汽车运动控制器的性能和可靠性面临着更高的要求。本文深入探讨了新能源汽车运动控制器中MCU&#xff08;微控制单元&#xff09;、DCDC电源管理芯片和CANFD总线通信芯片的选型要点、优化策略及其协同设计方案。通过综…

2.maven 手动安装 jar包

1.背景 有的时候&#xff0c;maven仓库无法下载&#xff0c;可以手动安装。本文以pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar为例。 2.预先准备 下载文件到本地指定位置。 2.1.安装pom mvn install:install-file \-Dfile/home/wind/tmp/pentaho-aggdesigner-5.1.5-jh…

OpenCV 图形API(75)图像与通道拼接函数-----将 4 个单通道图像矩阵 (GMat) 合并为一个 4 通道的多通道图像矩阵函数merge4()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 由4个单通道矩阵创建一个4通道矩阵。 该函数将多个矩阵合并为一个单一的多通道矩阵。也就是说&#xff0c;输出矩阵的每一个元素都是输入矩阵对…

AI日报 · 2025年05月02日 | 再见GPT-4!OpenAI CEO 确认 GPT-4 已从 ChatGPT 界面正式移除

1、OpenAI CEO 确认 GPT-4 已从 ChatGPT 界面正式移除 在处理 GPT-4o 更新问题的同时&#xff0c;OpenAI CEO Sam Altman 于 5 月 1 日在 X 平台发文&#xff0c;正式确认初代 GPT-4 模型已从 ChatGPT 主用户界面中移除。此举遵循了 OpenAI 此前公布的计划&#xff0c;即在 4 …

patch命令在代码管理中的应用

patch 是一个用于将差异文件&#xff08;补丁&#xff09;应用到源代码的工具&#xff0c;常用于修复 bug、添加功能或调整代码结构。在您提供的代码中&#xff0c;patch 命令通过一系列补丁文件&#xff08;.patch&#xff09;修改了 open-amp 库的源代码。 patch 命令的核心作…

spring-ai集成langfuse

1、pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

PyTorch 与 TensorFlow:深度学习框架的深度剖析与实战对比

PyTorch 与 TensorFlow&#xff1a;深度学习框架的深度剖析与实战对比 摘要 &#xff1a;本文深入对比 PyTorch 与 TensorFlow 两大深度学习框架&#xff0c;从核心架构、优缺点、适用场景等多维度剖析&#xff0c;结合实例讲解&#xff0c;帮助开发者清晰理解两者特性&#x…

如何配置NGINX作为反向代理服务器来缓存后端服务的响应?

大家好&#xff0c;我是锋哥。今天分享关于【如何配置NGINX作为反向代理服务器来缓存后端服务的响应&#xff1f;】面试题。希望对大家有帮助&#xff1b; 如何配置NGINX作为反向代理服务器来缓存后端服务的响应&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源…

DiT:文档图像Transformer 的自监督预训练

摘要 图像transformer&#xff08;Image Transformer&#xff09;最近在自然图像理解方面取得了显著进展&#xff0c; 无论是使用监督&#xff08;ViT、DeiT等&#xff09;还是自监督&#xff08;BEiT、MAE等&#xff09;预训练技术。在本文中&#xff0c;我们提出了DiT&#…

51c嵌入式~电路~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/11888986 一、电流检测电路 电流检测的应用 电路检测电路常用于&#xff1a;高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。电路专辑 对于大部分应用&#xff…

【Git】万字详解 Git 的原理与使用(上)

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 初识 Git1.1 Git 是什么&#xff1f;1.2 为什么要有 Git 2. 安装 Git2.1 Linux-Ubuntu 安装 Git2.2 Windo…

【原创开发】无印去水印[特殊字符]短视频去水印工具[特殊字符]支持一键批量解析

支持&#xff1a;快手&#xff0c;抖音&#xff0c;小红书&#xff0c;哔哩哔哩&#xff0c;等多款应用去水印&#xff0c;支持图集解析下载 【应用名称】&#xff1a;无印 【应用版本】&#xff1a;1.3 【应用大小】&#xff1a;17M 【测试机型】&#xff1a;小米14 【下载链…

qemu(3) -- qemu-arm使用

1. 前言 qemu中有很多的特技&#xff0c;此处记录下qemu-arm的使用方式&#xff0c;简单来说qemu-system-xx用于虚拟整个设备&#xff0c;包括操作系统的运行环境&#xff0c;而qemu-xx仅虚拟Linux应用程序的环境&#xff0c;不涉及操作系统&#xff0c;应用程序的系统调用有宿…

Docker的简单使用(不全)

Docker Hello World Docker 允许在容器内运行应用程序&#xff0c;使用docker run命令来在容器内运行一个应用程序 输出Hello World runoobrunoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"Hello world docker&#xff1a;Docker的二进制执行文件 run…