首页 > 编程语言 >Java IO流(二进制IO流、文本IO流)

Java IO流(二进制IO流、文本IO流)

时间:2024-06-14 10:58:11浏览次数:13  
标签:Java IO java 二进制 io import 文本

Java IO流(Input/Output Stream)是Java中用于处理输入输出操作的一种机制。

IO流可以从不同的数据源读取数据,或者将数据写入到不同的目标。根据处理的数据类型,IO流可以分为二进制IO流和文本IO流。

一、二进制IO流:

  二进制IO流主要用于处理非文本数据,如图片、音频、视频等。在Java中,二进制IO流的基类是`InputStream`和`OutputStream`。常用的二进制IO流有:

- `FileInputStream`:从文件中读取字节数据的输入流。


- `FileOutputStream`:向文件中写入字节数据的输出流。


- `BufferedInputStream`:带缓冲区的字节输入流。


- `BufferedOutputStream`:带缓冲区的字节输出流。


- `DataInputStream`:从输入流中读取基本数据类型的输入流。


- `DataOutputStream`:向输出流中写入基本数据类型的输出流。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BinaryIOExample {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("input.txt");
            FileOutputStream fos = new FileOutputStream("output.txt");

            int data;
            while ((data = fis.read()) != -1) {
                fos.write(data);
            }

            fis.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

二、文本IO流:

  文本IO流主要用于处理文本数据。在Java中,文本IO流的基类是`Reader`和`Writer`。常用的文本IO流有:

- `FileReader`:从文件中读取字符数据的输入流。


- `FileWriter`:向文件中写入字符数据的输出流。


- `BufferedReader`:带缓冲区的字符输入流。


- `BufferedWriter`:带缓冲区的字符输出流。


- `InputStreamReader`:将字节输入流转换为字符输入流。


- `OutputStreamWriter`:将字符输出流转换为字节输出流。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TextIOExample {
    public static void main(String[] args) {
        try {
            FileReader fr = new FileReader("input.txt");
            FileWriter fw = new FileWriter("output.txt");

            BufferedReader br = new BufferedReader(fr);
            String line;
            while ((line = br.readLine()) != null) {
                fw.write(line);
                fw.flush();
            }

            br.close();
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、IO流的优势:

1. 通用性:IO流提供了一种通用的方式来处理各种输入输出源,如文件、网络连接、内存等。通过使用IO流,可以方便地读取和写入不同类型的数据,而无需关心底层的数据存储和传输细节。

2. 抽象层次高:IO流将输入输出操作抽象为一系列的对象和方法,使得程序员可以专注于业务逻辑,而不需要关心底层的操作系统和硬件实现。这有助于提高代码的可读性和可维护性。

3. 可扩展性:Java IO库提供了许多不同类型的流,可以根据需要组合使用。例如,可以使用缓冲流提高读写性能,使用数据流处理基本数据类型,使用对象流处理对象等。这种设计使得IO流具有很强的可扩展性,可以满足各种复杂场景的需求。

4. 异常处理:IO流操作可能会抛出`IOException`异常,这是一种受检异常。通过使用try-catch语句处理这些异常,可以确保程序在遇到错误时能够正常运行,并提供相应的错误处理逻辑。

5. 资源管理:Java 7引入了try-with-resources语句,它可以自动关闭实现了`AutoCloseable`接口的资源。这使得在使用IO流时,可以更方便地管理资源,避免因忘记关闭资源而导致的资源泄露问题。

标签:Java,IO,java,二进制,io,import,文本
From: https://blog.csdn.net/2301_79600015/article/details/139629093

相关文章

  • Java到AI大模型,我为什么选择的后者
    我为什么从Java转到AI大模型在编程的海洋里,Java一直是我信赖的“小船”,载着我航行在代码的世界中。然而,随着行业的不断发展和变化,我开始感受到了一丝的迷茫和不安。我开始担心,随着技术的不断更新,Java这艘“小船”是否还能带我乘风破浪,继续前行。正是在这样的背景下,我接触......
  • 【Python&RS】基于Rasterio库裁剪栅格数据&压缩栅格影像
    ​     之前分享过【Python&RS】Rasterio库安装+基础函数使用教程,大家有兴趣的可以去看看。由于最近有涉及到栅格裁剪和压缩的问题,所以研究了一下今天和大家分享分享。原创作者:RS迷途小书童博客地址:https://blog.csdn.net/m0_56729804?type=blog1需要的库imp......
  • 【开源样本库分享】Five-Billion-Pixels-ENVIFormat 五十亿像素高精度样本库分享
    很高兴给大家分享一个好消息,Five-Billion-Pixels-ENVIFormat五十亿像素开源样本库(ENVI格式)正式上线了!Five-Billion-Pixels样本库是一个为遥感、地理信息系统(GIS)和图像处理领域的研究和应用而精心打造的高质量样本库。为了让更多的人受益,我们决定制作并发布ENVI格式的五十亿像素......
  • cc2/4链:针对commons-collections4的攻击
    cc2/4是干嘛的cc2、cc4针对的commons-collections4版本大于4.0(含)入口略有不同,后续和cc3一样通过TemplatesImpl加载恶意字节码调用链PriorityQueue.readobjectPriorityQueue的反序列化方法调用了heapify()heapifyheapify()调用了siftDown可以看见元素需要大于两个,所以我们......
  • STM32学习记录(二)————基本GPIO控制
    文章目录前言1.GPIO基础知识2.IO八种工作模式3固件库实现LED点灯前言一个学习STM32的小白有问题评论区或私信指出~1.GPIO基础知识GPIO(General-Purposeinput/output,通用输入/输出接口)用于感知外部信号(输入模式)和控制外部设备(输出模式)简单模块:LED,按键,蜂......
  • 第四届物联网与机器学习国际学术会议(IoTML 2024)
    【ACM独立出版,高录用,见刊检索快速稳定】第四届物联网与机器学习国际学术会议(IoTML2024)【IoTML2023会后三个半月内完成EI检索】20244thInternationalConferenceonInternetofThingsandMachineLearning2024年8月9-11日,中国-南昌大会官网:https://ais.cn/u/qM7ruu【更......
  • 实战分析Java的异步编程,并通过CompletableFuture进行高效调优
    一、写在开头在我们一开始讲多线程的时候,提到过异步与同步的概念,这里面我们再回顾一下:同步:调用方在调用某个方法后,等待被调用方返回结果;调用方在取得被调用方的返回值后,再继续运行。调用方顺序执行,同步等待被调用方的返回值,这就是阻塞式调用;异步:调用方在调用某个方法后,直接返......
  • Java中如何使用运算符?
    在Java中,运算符是用于执行基本数学计算、逻辑比较以及赋值操作等的重要元素。以下是Java中常见的运算符及其使用方法的详细介绍:1:算术运算符:加法(+):用于将两个数相加。inta=5;intb=3;intsum=a+b;减法(-):用于将两个数相减。intx=10;......
  • 重学java 70.IO流 Commons-io工具包
    所有人都不看好你,可你偏偏最争气                            ——24.6.14一、介绍        IO技术开发中,代码量很大,而且代码的重复率较高。如果我们要遍历目录,拷贝自录就需要使用方法的递归调用,也增大了程序的复......
  • 一篇文章看懂Redission原理
    文章目录☃️可重入锁原理☃️锁重试和WatchDog机制☃️MutiLock原理上一篇文章讲解了Rediision的使用,这篇文章讲解其原理☃️可重入锁原理在Lock锁中,他是借助于底层的一个voaltile的一个state变量来记录重入的状态的,比如当前没有人持有这把锁,那么state=0,假如有人......