每年桃花开的时候,我就会想起IO流,她曾经很难为我....

2023-12-26 18:30

本文主要是介绍每年桃花开的时候,我就会想起IO流,她曾经很难为我....,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言:

一、IO流:

二、字节流:

1、字节输入流:

FIleInputStream:

BufferedInputStream:

2、字节输出流: 

FileOutputStream:

BufferedOutputStream:

三、字符流: 

1、字符输入流: 

InputStreamReader:

BufferedReader:

2、字符输出流:

OutputStreamWriter: 

小问题:


前言:

大家吼啊!今天给大家带来秋天的第一篇博客。

不知道是不是个人原因,感觉一开始看这个IO流视频就感觉有点难,然后导图整理也多花了一点时间,毕竟基础不牢,地洞山摇嘛,都是为以后打夯基础。下面这张图中流非常的多,不用晕哈,我们现在先只学其中的四个抽象基类,包含其中的四个文件流、四个缓冲流。

一、IO流:

上图是按照数据类型将IO流划分为字节流和字符流,其实还有一种按照数据的流向来划分的方法,将其划分为输入流和输出流。

概念: 

IO:输入/输出(Input/Output)
流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输。
IO流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载

二、字节流:

字节流分为字节输入流和字节输出流。

1、字节输入流:

字节输入流(InputStream):

IO流下的四个抽象基类之一,是表示字节输入流的所有类的超类。

我们先学习它其中的FIleInputStream和BufferedInputStream。

FIleInputStream:

构造方法:FileInputStream(String name)

读取字节数据方法:

intread​()

从该输入流读取一个字节的数据。

intread​(byte[] b)

从该输入流读取最多 b.length个字节的数据到一个字节数组。

intread​(byte[] b, int off, int len)

从该输入流读取最多 len个字节的数据到字节数组。

BufferedInputStream:

字节缓冲输入流。
创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节。使用该缓冲流读取数据时会比较快捷。FileInputStream的三个读取方法它也可以使用。

构造方法:BufferedInputStream(InputStream in)

2、字节输出流: 

字节输出流(OuputStream):

IO流下的四个抽象基类之一,是表示字节输出流的所有类的超类。

我们先学习它其中的FileOutputStream和BufferedOutputStream。

FileOutputStream:

构造方法:FileOutputStream(String name)

写入字节数据方法:

voidwrite​(byte[] b)

b.length字节从指定的字节数组写入此文件输出流。

voidwrite​(byte[] b, int off, int len)

len字节从指定的字节数组开始,从偏移量 off开始写入此文件输出流。

voidwrite​(int b)

将指定的字节写入此文件输出流。

BufferedOutputStream:

字节缓冲输出流。
该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。

FileOutputStream的三个写数据方法它也能用。

构造方法:BufferedOutputStream(OutputStream out)

三、字符流: 

字符流分为字符输入流和字符输出流。 

1、字符输入流: 

字符输入流(Reader)。

用于读取字符流的抽象类。

我们先学习它的InputStreamReader和BufferedReader。

InputStreamReader:

是从字节流到字符流的桥梁。
它读取字节,并使用指定的编码将其解码为字符。
它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

构造方法:

InputStreamReader​(InputStream in)

创建一个使用默认字符集的InputStreamReader。

InputStreamReader​(InputStream in, String charsetName)

创建一个使用命名字符集的InputStreamReader。

读字符数据方法:

intread​()

读一个字符

intread​(char[] cbuf, int offset, int length)

将字符读入数组的一部分。

FileReader:

继承自InputStreamReader

用于读取字符文件的便捷类。

构造方法:FileReader​(String fileName)

BufferedReader:

字符缓冲输入流。
从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。

构造方法:BufferedReader(Reader in)

特有方法:

StringreadLine​()读一行文字。 结果包含行的内容的字符串,不包括任何行终止字符如果流的结尾已经到达,则为null

注意:此方法不读换行符等,换行需自加。

2、字符输出流:

字符输出流(Writer)。 

我们先学习它的OutputStreamWriter和BufferedWriter。

OutputStreamWriter: 

是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节

它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集

构造方法:

OutputStreamWriter​(OutputStream out)

创建一个使用默认字符编码的OutputStreamWriter。

OutputStreamWriter​(OutputStream out, String charsetName)

创建一个使用命名字符集的OutputStreamWriter。

写入字符数据方法: 

void write(int c)写一个字符
void write(char[] cbuf)写入一个字符数组
void write(char[] cbuf, int off, int len)写入字符数组的一部分
void write(String str)写一个字符串
void write(String str, int off, int len)写一个字符串的一部分

刷新和关闭流的方法:

voidclose​()

关闭流,先刷新。

voidflush​()

刷新流。

FileWriter:

用于写入字符文件的便捷类。

构造方法:FileWriter​(String fileName)

BufferedWriter:

字符缓冲输出流。
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途。

注意:使用该缓冲流写入数据后记得使用flush方法刷新流,避免数据停留在缓冲区。

构造方法:BufferedWriter(Writer out) 

特有方法:

void newLine()写一行行分隔符,行分隔符字符串由系统属性定义

小问题:

输入和输出两个概念个人很难区分,例如读取文本数据时,应该先创建字符缓冲输入流对象,也就是BufferedReader,但我老是会混淆,我会下意识的创建BufferedWriter,会把写(Writer)当成输入,把读(Reader)当成输出。

这篇关于每年桃花开的时候,我就会想起IO流,她曾经很难为我....的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

springboot体会BIO(阻塞式IO)

使用springboot体会阻塞式IO 大致的思路为: 创建一个socket服务端,监听socket通道,并打印出socket通道中的内容。 创建两个socket客户端,向socket服务端写入消息。 1.创建服务端 public class RedisServer {public static void main(String[] args) throws IOException {

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

android java.io.IOException: open failed: ENOENT (No such file or directory)-api23+权限受权

问题描述 在安卓上,清单明明已经受权了读写文件权限,但偏偏就是创建不了目录和文件 调用mkdirs()总是返回false. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_E

JavaEE-文件操作与IO

目录 1,两种路径 二,两种文件 三,文件的操作/File类: 1)文件系统操作 File类 2)文件内容操作(读文件,写文件) (1)打开文件 (2)关闭文件 (3)读文件/InputStream (4)写文件/OutputStream (5)读文件/reader (6)写文件/writer (7)Scanner 四,练习: 1,两种路径 1)绝对路径

Python---文件IO流及对象序列化

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 前文模块中提到加密模块,本文将终点介绍加密模块和文件流。 一、文件流和IO流概述         在Python中,IO流是用于输入和输出数据的通道。它可以用于读取输入数据或将数据写入输出目标。IO流可以是标准输入/输出流(stdin和stdout),也可以是文件流,网络流等。

标准IO与系统IO

概念区别 标准IO:(libc提供) fopen fread fwrite 系统IO:(linux系统提供) open read write 操作效率 因为内存与磁盘的执行效率不同 系统IO: 把数据从内存直接写到磁盘上 标准IO: 数据写到缓存,再刷写到磁盘上

linux基础IO——动静态库——进程编址、进程执行、动态库加载

前言:本节内容为基础IO部分的最后一节, 主要是为了讲一下动静态库里面的动态库如何加载到内存, 动态库的地址等等。 但是,这些内容牵扯到了程序的编址, 程序的加载, 进程的执行等等知识点, 所以,我们会从程序的编址讲起, 一直到进程的执行, 以及动态库加载结束。         ps:本节内容涉及到了进程地址空间, 磁盘的内容, 建议友友们了解相关知识后再来观看。 目录

mybatis错误——java.io.IOException Could not find resource comxxxxxxMapper.xml

在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang.RuntimeException: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause:

day09-IO-字符流其它流

一、字符流 字符流(只能做文本文件的处理)字符输入流 Reader--FileReader字符输出流 Writer--FileWriter​使用文件字符输入流的好处:读取中文不会出现乱码问题 1.1 字符输入流 构造器说明public FileReader (File file)创建字符输入流管道与源文件接通public FileReader(String pathname)创建字