java-IO

  JAVA IO

- java io可以让我们用标准的读写操作来完成对不同设备的读写数据工作.

- java将IO按照方向划分为输入与输出,参照点是我们写的程序.

- 输入:用来读取数据的,是从外界到程序的方向,用于获取数据.

- 输出:用来写出数据的,是从程序到外界的方向,用于发送数据.

  java将IO比喻为"流",即:stream. 就像生活中的"电流","水流"一样,它是以同一个方向顺序移动的过程.只不过这里流动的是字节(2进制数据).所以在IO中有输入流和输出流之分,我们理解他们是连接程序与另一端的"管道",用于获取或发送数据到另一端.

Java定义了两个超类(抽象类):

- java.io.InputStream:

所有字节输入流的超类,其中定义了读取数据的方法.因此将来不管读取的是什么设备(连接该设备的流)都有这些读取的方法,因此我们可以用相同的方法读取不同设备中的数据


- java.io.OutputStream:

所有字节输出流的超类,其中定义了写出数据的方法.

 java将流分为两类:节点流与处理流:

- 节点流:

也称为低级流.节点流的另一端是明确的,是实际读写数据的流,读写一定是建立在节点流基础上进行的.


- 处理流:

也称为高级流.处理流不能独立存在,必须连接在其他流上,目的是当数据流经当前流时对数据进行加工处理来简化我们对数据的该操作.

实际应用中,我们可以通过串联一组高级流到某个低级流上以流水线式的加工处理对某设备的数据进行读写,这个过程也成为流的连接,这也是IO的精髓所在.

文件流

  文件流是一对低级流,用于读写文件数据的流.用于连接程序与文件(硬盘)的"管道".负责读写文件数据.

文件输出流:java.io.FileOutputStream


package io;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;/*** JAVA IO  Input&Output  输入和输出* java程序与外界交换数据是基于IO完成的,这里输入与输出一个负责读一个负责写* 输入:是从外界到我们写的程序的方向,是用来从外界获取信息的。因此是"读"操作* 输出:是从我们写的程序到外界的方向,是用来向外界发送信息的。因此是"写"操作** java将IO比喻为"流",可以理解为是程序与外界连接的"管道",内部流动的是字节,并且* 字节是顺着同一侧方向顺序移动的。** java.io.InputStream 输入流,这个类是所有字节输入流的超类,规定了所有字节输入* 流读取数据的相关方法。* java.io.OutputStream 输出流,这个类是所有字节输出流的超类,规定了所有字节输出* 流写出数据的相关方法。** 实际应用中,我们连接不同的设备,java都专门提供了用于连接它的输入流与输出流,而* 这些负责实际连接设备的流称为节点流,也叫低级流。是真实负责读写数据的流。* 与之对应的还有高级流,高级流可以连接其他的流,目的是当数据流经它们时,对数据做某* 种加工处理,用来简化我们的操作。*** 文件流* java.io.FileInputStream和FileOutputStream* 这是一对低级流,继承自InputStream和OutputStream。用于读写硬盘上文件的流**/
public class FOSDemo {public static void main(String[] args) throws IOException {//向当前目录下的demo.dat文件中写入数据/*FileOutputStream提供的常用构造器FileOutputStream(String path)FileOutputStream(File file)*///文件流创建时,如果该文件不存在会自动将其创建(前提是该文件所在目录必须存在!)FileOutputStream fos = new FileOutputStream("./demo.dat");/*void write(int d)向文件中写入1个字节,写入的内容是给定的int值对应的2进制的"低八位"int值 1:                         vvvvvvvv二进制:00000000 00000000 00000000 00000001demo.dat文件内容:00000000*/fos.write(1);/*vvvvvvvv00000000 00000000 00000000 00000010demo.dat文件内容00000001 00000010*/fos.write(2);fos.close();System.out.println("执行完了!");}
}

 文件输入流FileInputStream


package io;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;/*** end 结尾* read 读*** 文件字节输入流,用于从文件中读取字节*/
public class FISDemo {public static void main(String[] args) throws IOException {/*fos.dat文件内容00000001 00000011*/FileInputStream fis = new FileInputStream("fos.dat");/*int read()读取一个字节,并一int型返回。返回的整数中读取的字节部分在该整数2进制的最后8位上如果返回值为整数-1,则表示流读取到了末尾。对于读取文件而言就是EOF(end of file文件末尾)第一次调用read():int d = fis.read();fos.dat文件内容00000001 00000011^^^^^^^^读取该字节返回int值时,2进制样子:00000000 00000000 00000000 00000001^^^^^^^^|-----补充24个0(3字节)-----| 读取的字节返回的int值d就是上述内容*/int d = fis.read();System.out.println(d);/*第二次调用read()d = fis.read();fos.dat文件内容00000001 00000011^^^^^^^^读取该字节返回int值时,2进制样子:00000000 00000000 00000000 00000011^^^^^^^^|-----补充24个0(3字节)-----| 读取的字节返回的int值d就是上述内容*/d = fis.read();System.out.println(d);/*第三次调用read()d = fis.read();fos.dat文件内容00000001 00000011^^^^^^^^文件末尾了返回int值时,2进制样子:11111111 11111111 11111111 11111111^^^^^^^^|-----补充32个1(4字节,来表示-1)-----|返回的int值d就是上述内容*/d = fis.read();System.out.println(d);fis.close();}
}

总结:   

    Java中的IO(Input/Output)是指处理输入和输出数据的机制。通过IO,可以将数据从一个地方发送到另一个地方,如从文件读取数据,或将数据写入到文件中。Java提供了丰富的IO类和接口来支持各种IO操作。

Java的IO库可以分为两个大类:基于字节流的IO和基于字符流的IO

基于字节流的IO:

  • InputStream和OutputStream是所有字节流的父类,分别用于从源读取字节和将字节写入目标。
  • FileInputStream和FileOutputStream用于从文件中读取字节和将字节写入文件。
  • BufferedInputStream和BufferedOutputStream提供了缓冲的功能,加快IO的速度。
  • ByteArrayInputStream和ByteArrayOutputStream用于读取和写入内存中的字节数组。
  • DataInputStream和DataOutputStream用于以特定的格式读取和写入基本数据类型。
  • ObjectInputStream和ObjectOutputStream可以将对象序列化和反序列化,实现对象的读写。

基于字符流的IO:

  • Reader和Writer是所有字符流的父类,分别用于从源读取字符和将字符写入目标。
  • FileReader和FileWriter用于从文件中读取字符和将字符写入文件。
  • BufferedReader和BufferedWriter提供了缓冲的功能,加快IO的速度。
  • CharArrayReader和CharArrayWriter用于读取和写入内存中的字符数组。
  • InputStreamReader和OutputStreamWriter用于将字节流转换为字符流。
  • StringReader和StringWriter用于将字符串作为字符流进行读写。

另外,Java还提供了一些特殊的IO类和接口,如:

  • RandomAccessFile可以随机访问文件,既可以读取文件的任意位置,也可以在任意位置写入数据。
  • PrintStream和PrintWriter提供了方便的打印功能,可以将数据格式化后写入目标。
  • BufferedReader和Scanner可以用于从输入流中逐行读取数据。
  • FileOutputStream和FileInputStream可以用于读写文件的元数据,如文件权限、创建时间等。

     

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

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

相关文章

【鸿蒙4.0】详解harmonyos开发语言ArkTS

文章目录 一.什么是ArkTS?1.ArkTS的背景2.了解js,ts,ArkTS的演变js(Javascript)Javascript的简介Javascript的特点 ts(Typescript)ArkTS 二. ArkTS的特点 一.什么是ArkTS? 1.ArkTS的背景 如官方文档所描述,ArkTS是基…

2023全球边缘计算大会深圳站:核心内容与学习收获(附大会核心PPT下载)

边缘计算作为当今IT领域的热门话题,已经引起了全球范围内的广泛关注。本次大会汇聚了众多业界精英,共同探讨边缘计算的发展趋势、技术应用与创新实践。本文将围绕大会的核心内容展开讨论,并分析参会者从中能够学到的东西。 一、边缘计算的发…

【Linux】yum

个人主页 : zxctsclrjjjcph 文章封面来自:艺术家–贤海林 如有转载请先通知 yum 1. 什么是yum?2. Linux系统(Centos)的生态3. yum的相关操作4. yum的本地配置5. 如何安装软件 1. 什么是yum? yum是一个软件下载安装的一个客户端&a…

(Bean实例化的基本流程 )学习Spring的第六天

Bean实例化的基本流程 其实可以解释为三个过程: 1 . 有关Bean的信息被封装成一个map集合 : DeanDefinitionMap . key为Bean的名称 , value为有关<bena>标签的信息 2 . Spring框架对这个存储Bean信息的Map进行遍历 , 进行创建对象 , 把创建好的对象存储到另一个Map集合里…

如何防止你的 Goroutine 泄露 Part2

文章目录 简述NumGoroutine演示案例pprofruntime/pprofhttp/net/pprof gopsLeak Test总结参考资料 上篇 文章说到&#xff0c;防止 goroutine 泄露可从两个角度出发&#xff0c;分别是代码层面的预防与运行层面的监控检测。今天&#xff0c;我们来谈第二点。 简述 前文已经介…

大数据技术原理及应用课实验1 熟悉常用的Linux操作和Hadoop操作

实验1 熟悉常用的Linux操作和Hadoop操作 一、实验目的 Hadoop运行在Linux系统上&#xff0c;因此&#xff0c;需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作&#xff0c;为顺利开展后续的其他实验奠定基础。 二、实验平台 &#xff08;1&a…

nodejs前端项目的CI/CD实现(二)jenkins的容器化部署

一、背景 docker安装jenkins&#xff0c;可能你会反问&#xff0c;这太简单了&#xff0c;有什么好讲的。 我最近就接手了一个打包项目&#xff0c;它是一个nodejs的前端项目&#xff0c;jenkins已在容器里部署且运行OK。 但是&#xff0c;前端组很追求新技术&#xff0c;不…

递归、搜索与回溯算法(专题二:深搜)

往期文章&#xff08;希望小伙伴们在看这篇文章之前&#xff0c;看一下往期文章&#xff09; &#xff08;1&#xff09;递归、搜索与回溯算法&#xff08;专题零&#xff1a;解释回溯算法中涉及到的名词&#xff09;【回溯算法入门必看】-CSDN博客 &#xff08;2&#xff09…

Unity—配置lua环境变量+VSCode 搭建 Lua 开发环境

每日一句&#xff1a;保持须臾的浪漫&#xff0c;理想的喧嚣&#xff0c;平等的热情 Windows 11下配置lua环境变量 一、lua-5.4.4版本安装到本地电脑 链接&#xff1a;https://pan.baidu.com/s/14pAlOjhzz2_jmvpRZf9u6Q?pwdhd4s 提取码&#xff1a;hd4s 二、高级系统设置 此电…

启动低轨道卫星LEO通讯产业与6G 3GPP NTN标准

通讯技术10年一个大跃进&#xff0c;从1990年的2G至2000年的3G网路&#xff0c;2010年的4G到近期2020年蓬勃发展的5G&#xff0c;当通讯技术迈入融合网路&#xff0c;当前的 5G 技术不仅可提供高频宽、低延迟&#xff0c;同时可针对企业与特殊需求以 5G 专网的模式提供各式服务…

SpringBoot(三层框架Controller,Mapper,Service)中遇到的一些注解整理

本文主要从Controller层,Service层,Mapper层这三层架构中记录用到的各种注解 还有一些MyBatis用到的注解 持续更新到本人的毕设做完为止,太多了太多了根本学不完哈哈哈 1.Controller层 1.1GetMapping/PostMapping/DeleteMapping/PutMapping 用于建立HTTP请求与处理方法之间的…

HTML动态房屋装饰特效

下面是代码&#xff1a; <!DOCTYPE html> <html lang"en" ><head><meta charset"UTF-8"><title>HTML5房屋装饰工具DEMO演示</title><link rel"stylesheet" href"css/style.css"></he…