【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.数据流的处理:字节流和字符流 数据的基本单位 ...
随机推荐
- ansible常用模块的学习
ansible常用模块列表: 1.file 点击查看代码 2.copy 点击查看代码 3.yum--repository 点击查看代码 4.yum 点击查看代码 5.service 点击查看代码 6. ...
- 让Easysearch运行在Kylin V10 (Lance)-aarch64上
简介 本文主要介绍在国产操作系统 Kylin V10 (Lance)-aarch64 上安装单机版 Easysearch/Console/Agent/Gateway/Loadgen 系统配置 在安装之 ...
- Vue学习:18.Vue插槽
Vue 中的插槽(slot)是一种灵活的机制,用于在父组件中将内容传递到子组件的特定位置.它允许我们在子组件中定义可以在父组件中传递任意内容的"插槽",从而实现更灵活的组件化. 在 ...
- css 隐藏移动端滚动条
<template> <div id="app"> <router-view /> </div> </template htm ...
- Vue聊天框自动滚动底部
原理:通过监听数据更新,将滚动的最大高度赋值给滚动条的最大高度,并等待页面更新完成后再将页面滚动到底部. 容器代码 watch监听 scrollTop: 距离最顶部高度 scrollHeight:滚动 ...
- Linux初始化配置主机名和固定ip
主机名修改 hostname 查看主机名 临时修改主机名 hostname xxx 修改主机名 重启后无效 永久修改主机名 修改/etc/sysconfig/network 固定IP修改 ifconf ...
- MAC下Cowardly refusing to 'sudo brew install解决方案
副标题:<论学习英语的重要性> 在执行'sudo brew install cmake'的时候报错,错误信息如下. (一脸懵逼) 解决方案: 其实报错信息都说好了,大概意思是不能用管理员权 ...
- ClickHouse介绍(三)MergeTree系列表引擎
MergeTree系列表引擎 ClickHouse中最核心的引擎当属MergeTree系列引擎,其中基础表引擎为MergeTree,常用的表引擎还有ReplacingMergeTree.Summing ...
- Linux设备模型:2、基本对象 Kobject、Kset、Ktype
原文:http://www.wowotech.net/device_model/kobject.html 作者:wowo 发布于:2014-3-7 0:25 分类:统一设备模型 前言 Kobject是 ...
- Rougamo、Fody 实现静态Aop
最近在看项目,看到别人使用Rougamo框架,好奇花了点时间仔细研究了,在这里记录一下. 0. 静态编织 Aop 首先,我们先了解什么是Aop? Aop 是指面向切面编程 (Aspect Orient ...