【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.数据流的处理:字节流和字符流 数据的基本单位 ...
随机推荐
- ES 关于 remote_cluster 的一记小坑
最近有小伙伴找到我们说 Kibana 上添加不了 Remote Cluster,填完信息点 Save 直接跳回原界面了.具体页面,就和没添加前一样. 我们和小伙伴虽然隔着网线但还是进行了深入.详细的交 ...
- XML文档定义的几种形式和本质区别
XML文档定义的形式 两种定义形式:DTD.Schema DTD:数据类型定义(Data Type Definition),用以描述XML文档的文档结构,是早期的XML文档定义形式. Schema:其 ...
- Spring源码——详细流程图(超详细)
Spring源码流程图
- 三月二十四日 安卓app打卡开发日志
目前打卡系统基本完成 没有实现的功能有无法统计次数 和 连接本地数据库 我全程连接的远程数据库 package com.example.test_four.utils; import java.sql ...
- perfers-color-scheme 使用简单介绍
perfers-color-scheme 简介 prefers-color-scheme 媒体查询属性用于检测用户操作系统是否使用深色模式. 属性值 dark 表示用户操作系统使用深色模式 light ...
- Mysql RC/RR隔离原理和区别 不可重复读和可重复读
Mysql RC/RR隔离原理和区别 不可重复读和可重复读 mysql四种隔离级别:1.未提交读(READ UNCOMMITED)脏读2.已提交读 (READ COMMITED)简称(RC) 不可重复 ...
- Linux 提权-Capabilities
本文通过 Google 翻译 Capabilities – Linux Privilege Escalation - Juggernaut-Sec 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字 ...
- SpringBoot 3.x 结合 Swagger3 (Knife4j )踩坑实录
SpringBoot 3.x + Swagger3 踩坑实录 我的是springboot 版本是:3.2.2 <parent> <groupId>org.springframe ...
- 在Linux驱动中使用input子系统
在Linux驱动中使用输入子系统 参考: https://www.cnblogs.com/lifexy/p/7553861.html https://www.cnblogs.com/linux-37g ...
- 高通参考设计中MTP与QRD
高通参考设计中MTP与QRD 背景 之前在调试设备树的时候,看到设备树带了一个qrd的后缀,一直没搞清楚.上网找资料也好像不是我想要的. 今天查阅lk侧的代码,发现了HW_PLATFORM_HRD这个 ...