数据输入输出流(I/O)

文章目录


前言

数据输入输出流也是将文件输入输出流打包后使用的对象。相比于文件输入输出流,数据输入输出流提供了简单易用的方法去操作不同类型的数据;自身采用缓冲区机制,提高运行效率。

数据输入输出流适用于对内存中的数据进行读写操作,简单易用,而文件输入输出流适用于对文件进行读写操作,具有更好的性能和对大文件的支持。


一、数据输入输出流是什么?

数据输入输出流是用于在程序中读取和写入数据的基本机制。 它们是一种操作数据的方式,允许程序与外部设备(如文件、网络、键盘、屏幕等)进行交互。(需要导入java.io包)

**数据输入流(DataInputStream)用于从外部设备读取数据,并将其转化为程序可以处理的数据格式。**常见的数据输入流包括输入文件流(FileInputStream)、输入字符流(FileReader)和标准输入流(System.in)等。

**数据输出流(DataOutputStream)用于将程序中的数据写入到外部设备。**常见的数据输出流包括输出文件流(FileOutputStream)、输出字符流(FileWriter)和标准输出流(System.out)等。

二、使用方法

1.DataInputStream类

构造方法:

java 复制代码
new DataInputStream(InputStream in);
//in参数为被包装的字节输入流

|---------------------|--------------------------------------|
| 方法 | 功能描述 |
| readByte() | 从输入流中读取一个字节,并将其作为有符号的byte值返回 |
| readUnsignedByte() | 从输入流中读取一个字节,并将其作为无符号的byte值返回 |
| readChar() | 从输入流中读取两个字节,并将其作为char值返回 |
| readShort() | 从输入流中读取两个字节,并将其作为有符号的short值返回 |
| readUnsignedShort() | 从输入流中读取两个字节,并将其作为无符号的short值返回 |
| readInt() | 从输入流中读取四个字节,并将其作为有符号的int值返回 |
| readLong() | 从输入流中读取八个字节,并将其作为有符号的long值返回 |
| readFloat() | 从输入流中读取四个字节,并将其作为float值返回 |
| readDouble() | 从输入流中读取八个字节,并将其作为double值返回 |
| readUTF() | 从输入流中读取一个UTF-8编码的字符串,并将其作为String对象返回 |
[DataInputStream类的特有方法]

2.DataOutputStream类

构造方法:

java 复制代码
new DataOutputStream(OutputStream out);
//out参数为被包装的字节输出流

|-------------------------|--------------------|
| 方法 | 功能描述 |
| writeUTF(String s) | 将一个UTF-8编码的字符串写入此流 |
| writeBoolean(boolean b) | 将一个boolean值写入此流 |
| writeByte(int v) | 将一个字节写入此流 |
| writeBytes(String s) | 将字节串写入此流 |
| writeShort(int s) | 将一个short值写入此流 |
| writeChar(int v) | 将一个字节写入此流 |
| writeChars(String s) | 将字符串写入此流 |
| writeInt(int i) | 将一个int值写入此流 |
| writeFloat(float f) | 将一个float值写入此流 |
| writeLong(long l) | 将一个long值写入此流 |
| writeDouble(double d) | 将一个double值写入此流 |
[DateOutputStream类的特有方法]

3.实操展示

**项目:**使用数据输入输出流,向show.txt文件输入内容,同时将其输入完后的show.txt文件内容返回至控制台中。

java 复制代码
import java.io.*;
public class DataStream {
    public static void main(String[] args) {
        File file = new File("show.txt");
        FileOutputStream out = null;
        DataOutputStream out2 = null;

        FileInputStream in = null;
        DataInputStream in2 =null;
        try {
            out = new FileOutputStream(file);
            out2 = new DataOutputStream(out);
            
            out2.writeUTF("一生二,二生三,三生万物");
            out2.writeInt(1024);

            in = new FileInputStream(file);
            in2 = new DataInputStream(in);
      
            System.out.println(in2.readUTF());
            System.out.println(in2.readInt());
            

        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(out!=null){
                try {
                    out.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if(out!=null){
                try {
                    out2.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if(out!=null){
                try {
                    in.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if(out!=null){
                try {
                    in2.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

运行结果:

保存在文件中的信息

返回终端的信息

如图所示,show.txt文件有乱码生成。在Java中,writeUTF()方法用于将字符串按照UTF-8编码格式写入文件。如果写入的文件中出现乱码,可能是因为以下几个原因:

  1. 文件的字符编码与读取文件时使用的字符编码不一致。当你使用writeUTF()写入文件时,文件的编码应该是UTF-8。然而,当你读取文件时,也需要使用UTF-8编码格式来正确读取文件中的内容。

  2. 文件可能包含了非UTF-8编码的字符。writeUTF()只能写入符合UTF-8编码的字符,如果你尝试写入非UTF-8编码的字符,则可能引发乱码问题。

  3. 文件可能被其他程序以不同的编码格式写入。如果你在读取文件时使用了错误的字符编码,那么读取文件内容时就会出现乱码。

为了解决乱码问题,你可以尝试以下几个步骤:

  1. 确保文件的编码和读取文件时使用的编码一致。例如,当你使用BufferedReader读取文件时,可以指定字符编码如下:

    java 复制代码
    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
  2. 确保文件中只包含UTF-8编码的字符。

  3. 如果文件确实包含非UTF-8编码的字符,你可以尝试使用其他编码格式来读取文件。


总结

以上就是数据输入输出流的简单使用,输入输出流提供的方法可以使我们快速便捷地将数据写入文件或读取文件信息。

相关推荐
猛犸MAMMOTH2 分钟前
Python打卡第46天
开发语言·python·机器学习
多多*27 分钟前
微服务网关SpringCloudGateway+SaToken鉴权
linux·开发语言·redis·python·sql·log4j·bootstrap
梓仁沐白28 分钟前
【Kotlin】协程
开发语言·python·kotlin
写bug写bug36 分钟前
如何正确地对接口进行防御式编程
java·后端·代码规范
Cyanto1 小时前
Java并发编程面试题
java·开发语言·面试
海的诗篇_1 小时前
前端开发面试题总结-JavaScript篇(一)
开发语言·前端·javascript·学习·面试
在未来等你1 小时前
互联网大厂Java求职面试:AI大模型与云原生技术的深度融合
java·云原生·kubernetes·生成式ai·向量数据库·ai大模型·面试场景
じ☆ve 清风°1 小时前
理解JavaScript中map和parseInt的陷阱:一个常见的面试题解析
开发语言·javascript·ecmascript
sss191s1 小时前
Java 集合面试题从数据结构到 HashMap 源码剖析详解及常见考点梳理
java·开发语言·数据结构
IGP91 小时前
20250606-C#知识:委托和事件
开发语言·c#