【Java】Input,Output,Stream I/O流 01 概述 & 4个基础流
Input,Output,Stream IO流
I/O Input/Output缩写、I/O技术用于处理设备之间的数据传输,读写文件,网络通讯
Java程序对于数据的操作以Stream流的形式进行
io包提供了各种流的类与接口,以获取不同种类型的数据,并通过标准方式输入输出数据
输入和输出的关系
Input 输入 是从数据存储文件中把数据读取到内存中的过程【硬盘 -> 内存】
Output输出 是从内存中把数据写入到存储文件中的过程 【内存 -> 硬盘】
流的分类
- 按数据单位分:字节流 8bit、字符流 16bit
- 按流的方向分:输入流、输出流
- 按流的角色分: 节点流 处理流
抽象基类4个
- 输入流 InputStream
- 输出流 OutputStream
- 读取流 Reader
- 读写流 Writter
继承的实现就是这4个实现类加前缀名称,节点流、缓冲流、XX流等等
节点的读取操作:
public class IOTest {
public static void main(String[] args) throws IOException {
File file = new File("fileSample.txt");
FileReader fileReader = new FileReader(file);
// 返回读入的一个字符,如果读入文件的末尾,返回-1
//int read = fileReader.read();
int c = fileReader.read() ;
while ( c != -1 ){
System.out.print((char)c + "\t");
c = fileReader.read();
}
// 读取完毕 释放资源 物理链接GC不会对其回收 Scanner JDBC I/O Socket
fileReader.close();
// 异常处理、为了保证流资源一定可以执行关闭操作、建议使用try-catch-finally
// FileNotFoundException 系统找不到指定的文件 要保证文件位置正确和存在
}
}
使用try-catch-finally处理
public class IOTest {
public static void main(String[] args) {
File file = new File("fileSample.txt");
FileReader fileReader = null;
try {
fileReader = new FileReader(file);
int c = fileReader.read() ;
while ( c != -1 ){
System.out.print((char)c + "\t");
c = fileReader.read();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
使用数组作为缓冲容器的问题:
public class IOTest {
public static void main(String[] args) throws Exception {
File file = new File("fileSample.txt");
Reader reader = new FileReader(file);
// 缓冲容器
char[] buffer = new char[5];
int len;
while ( (len = reader.read(buffer)) != -1){
// 根据索引的个数遍历
for (int i = 0; i < buffer.length; i++) {
// Hello World!!!ld!!! 可能会出现这样的情况
// 问题出现在于如果已经读完了数据,但是多出的之前的已经放进去的数据也被读出来了!!!
System.out.println(buffer[i]);
}
}
reader.close();
}
}
正确的遍历方式
public class IOTest {
public static void main(String[] args) throws Exception {
File file = new File("fileSample.txt");
Reader reader = new FileReader(file);
// 缓冲容器
char[] buffer = new char[5];
int len;
while ( (len = reader.read(buffer)) != -1){
// 根据索引的个数遍历
for (int i = 0; i < len; i++) {
// Hello World!!!ld!!! 可能会出现这样的情况
// 问题出现在于如果已经读完了数据,但是多出的之前的已经放进去的数据也被读出来了!!!
System.out.println(buffer[i]);
}
}
reader.close();
}
}
用String接收
public class IOTest {
public static void main(String[] args) throws Exception {
File file = new File("fileSample.txt");
Reader reader = new FileReader(file);
// 缓冲容器
char[] buffer = new char[5];
int len;
while ( (len = reader.read(buffer)) != -1){
// 用String读取 从0 到末尾的前一位读取
String str = new String(buffer,0,len);
System.out.print(str + "\t");
}
reader.close();
}
}
写出数据:
public class IOTest {
public static void main(String[] args) throws Exception {
// 输出的文件如果不存在,输出流对象会直接创建文件然后进行输出
File file = new File("fileSample.txt");
// 写出文件的位置
Writer writer = new FileWriter(file,true);
// new FileWriter(file,true) 在原有文件上追加写入数据
// new FileWriter(file,false) or new FileWriter(file) 覆写操作
// 原始数据
String data = "\n这是我们要写入的数据!!!";
// 转换成字符数组作为可传输的格式
char[] chars = data.toCharArray();
// 读写数据 覆盖写入的操作
writer.write(chars);
writer.write("\n直接写入的数据".toCharArray());
writer.close();
}
}
读写同时操作,复制文件
public class IOTest {
public static void main(String[] args) throws Exception {
// 读取文件
File src = new File("fileSample.txt");
// 读写文件
File dest = new File("destSample.txt");
// 文件读取流对象
Reader reader = new FileReader(src);
// 文件读写对象
Writer writer = new FileWriter(dest);
// 缓冲数组
char[] readerBuffer = new char[3];
int read; // 每次读取的个数
while ( (read = reader.read(readerBuffer)) != -1 ){
System.out.print(read+"..."); // 打印显示
System.out.print("\n" + new String(readerBuffer) + "\n");
writer.write(readerBuffer,0,read); // 写入字符数组
}
reader.close();
writer.close();
}
}
【Java】Input,Output,Stream I/O流 01 概述 & 4个基础流的更多相关文章
- JAVA input/output 流层次关系图
在java中,input和output流种类繁多,那么它们之间是否有关系呢?答案是肯定的,其中使用到了设计模式,装饰模式 下图来自于HEAD FIRST 设计模式 装饰模式一章 下图来自网络博客:ht ...
- Java 8 (6) Stream 流 - 并行数据处理与性能
在Java 7之前,并行处理集合非常麻烦.首先你要明确的把包含数据的数据结构分成若干子部分,然后你要把每个子部分分配一个独立的线程.然后,你需要在恰当的时候对他们进行同步来避免竞争,等待所有线程完成. ...
- Java 8 (4) Stream 流 - 使用
在本节中将介绍Stream API支持的许多操作,这些操作可以完成更复杂的数据查询,如筛选.切片.映射.查找.匹配和归约.还有一些特殊的流如:数值流.来自文件和数组等多种来源的流. 筛选和切片 1.用 ...
- Java 8 (3) Stream 流 - 简介
什么是流? 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语言来表达,而不是临时编写一个实现).就现在来说你可以先把它当做是一个遍历数据集的高级迭代器.此外,流还支持并行,你 ...
- Java学习:Stream流式思想
Stream流 Java 8 API添加了一种新的机制——Stream(流).Stream和IO流不是一回事. 流式思想:像生产流水线一样,一个操作接一个操作. 使用Stream流的步骤:数据源→转换 ...
- Java 8创建Stream流的5种方法
不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺 ...
- java中的Stream流
java中的Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带 ...
- MessagePack Java Jackson 在不关闭输出流(output stream)的情况下序列化多变量
com.fasterxml.jackson.databind.ObjectMapper 在默认的情况下在写出输入后将会关闭输出流(output stream). 如果你希望序列化多值变量在同一个输出流 ...
- java进阶篇——Stream流编程
Stream流 函数式接口 1.消费型接口--Consumer @FunctionalInterface public interface Consumer<T> { /** * 对给定的 ...
- IO(Input&Output)流の介绍
1.导读 对于设备之间的流动(即写入数据或读出数据),Java专门用Java.io包进行操作.这些数据的流动便是我们所说的数据的输入输出流(IO流). 2.数据流的处理:字节流和字符流 数据的基本单位 ...
随机推荐
- vue3使用表格el-table-infinite-scroll.js:18 Uncaught (in promise) Error: [el-table-infinite-scroll]: .el-scrollbar__wrap element not found.
先看下表格里面有没有这个el-scrollbar__wrap class类 没有的话升级一下element-plus到最新的就行 你可以先查看element-plus的版本 npm view elem ...
- IceRPC之依赖注入>快乐的RPC
作者引言 很高兴啊,我们来到了IceRPC之依赖注入>快乐的RPC,基础引导,打好基础,才能让自已不在迷茫,快乐的畅游世界. 依赖注入和IceRPC 了解 IceRPC (C#) 如何为依赖注入 ...
- C#.NET6 ASP.NET CORE MVC 获取客户端IP
重点是拿到HttpContext 对象. 先从Headers["Cdn-Src-Ip"] 中取IP,其次从Headers["X-Forwarded-For"] ...
- SRE 排障利器,接口请求超时试试 httpstat
夜莺资深用户群有人推荐的一个工具,看了一下真挺好的,也推荐给大家. 需求场景 A 服务调用 B 服务的 HTTP 接口,发现 B 服务返回超时,不确定是网络的问题还是 B 服务的问题,需要排查. 工具 ...
- 《史记 XuYu列传》
前言 甲辰年二月十九,余记挂友人须臾.大醉,作此篇以悼念故友.忆往昔同窗之情,言语无不有经天纬地之能,举手投足间便可斩敌方上将.能文能武,乃当世之奇才,其言语中有大智慧.(文体并不重要) 吃饭时 Xu ...
- spring与设计模式之四适配器模式
一.定义 适配器模式-或者称为转接口模式,变压器模式.通过适配,可以让原来提供特定功能的对象完成另外一个标准的功能. 所以,所谓的适配应该可以这样称呼:让某些类/接口适配/转换某个标准/功能. 适配器 ...
- Python中r+,w+,a+的区别
相信有很多人对他们的区别不清楚,网上对他们的讨论又过于复杂. 其实利用光标位置来区分它们就会变得非常地简单. r+读写模式 打开文件之后光标位置位于0的位置 根据光标位置读写 w+写读模式 会清空文件 ...
- 记录一次EF实体跟踪错误
记录一次EF实体跟踪错误 前言 在我写文章编辑接口的,出现了一个实体跟踪的错误,详情如下 System.InvalidOperationException: The instance of entit ...
- 基于 Linux 2.6的 硬中断 / 软中断的原理以及实现
Author:zhangskd @ csdn blog 概述 从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器. 如果中断的线是激活的,中断控制 ...
- FFmpeg新旧接口对照使用一览
背景 根据例程学习调用ffmpeg 库方法的时候,发现了一堆警告. main.cpp:81:37: warning: 'AVStream::codec' is deprecated [-Wdeprec ...