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

文章目录

  • 前言
  • 一、数据输入输出流是什么?
  • 二、使用方法
    • 1.DataInputStream类
    • 2.DataOutoutStream类
    • 3.实操展示
  • 总结

前言

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

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


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

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

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

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

二、使用方法

1.DataInputStream类

构造方法:

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

2.DataOutputStream类

构造方法:

new DataOutputStream(OutputStream out);
//out参数为被包装的字节输出流
DateOutputStream类的特有方法
方法功能描述
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值写入此流

3.实操展示

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

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读取文件时,可以指定字符编码如下:
    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
    
  2. 确保文件中只包含UTF-8编码的字符。

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


总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA安装JAVA_HOME报错、启动界面卡死的解决方案

1、起因 在使用一段时间社区版的IDEA后,发现有些功能无法正常使用,于是打算安装正版旗舰版IDEA(狗头)。 2、JAVA_HOME报错 结果发现安装完后,经过一段操作,IDEA无法正常启动,报错如下&#x…

oracle一次sql优化笔记

背景:两个百万级数据量表需要连接,加全索引的情况下速度仍不见改善,苦查一下午解决问题未遂。 解决:经大佬指点了解到oracle优化器提示,使用/* USE_HASH(table1 table2) */或者/* USE_MERGE(table1 table2) */来指导优…

Adobe Acrobat DC 2022:全方位PDF编辑利器,解锁文档处理新境界

在当今信息爆炸的时代,PDF格式因其跨平台性、稳定性以及易读性而备受欢迎,成为办公、学习和交流的常用格式。Adobe Acrobat DC 2022作为专业的PDF编辑软件,凭借其卓越的性能和丰富的功能,赢得了众多用户的青睐。 Adobe Acrobat D…

Java web应用性能分析之性能指标【响应时间】

前面几篇发出来,发现漏了一个标准说明。当我们谈论应用慢时,这个慢的指标是啥?怎么衡量的?从用户体验来讲,一个页面展示在3秒完成,用户还能接受,超过3秒就会影响用户体验,用户就会感…

107页 | 企业数字化转型规划设计(免费下载)

【1】关注本公众号,转发当前文章到微信朋友圈 【2】私信发送 【企业数字化转型规划设计】 【3】获取本方案PDF下载链接,直接下载即可。 如需下载本方案PPT原格式,请加入微信扫描以下方案驿站知识星球,获取上万份PPT解决方案&…

深入理解Java IO流:字节流

深入理解Java IO流:字节流 引言 在Java中,IO(输入/输出)操作是程序与外部世界交互的重要方式。 其中,File类是进行文件操作的基础,而字节流和字符流则是数据传输的两种主要方式。 本文将深入探讨这些概念及…

C#到底属于编译型语言还是解释型语言?

C#是一种编译型语言,也称为静态类型语言,这意味着C#代码在运行之前需要经过编译器的编译处理,并生成一个可执行的本地代码文件(通常是.exe或.dll文件)。相反,解释型语言将代码转换为低级代码后直接执行&…

Llama3本地部署及API接口本地调试,15分钟搞定最新Meta AI开源大模型本地Windows电脑部署

文章目录 目的操作难度等级15分钟本地Windows电脑部署Llama3 开源大模型1、下载安装Ollama2、使用Ollama的命令下载Llama3模型文件3、使用Llama3聊天对话功能4、本地Llama3 API接口调用 目的 你知道国内大模型多少是基于Llama2改造的,你就知道Llama模型有多厉害了&…

vulfocus靶场redis 未授权访问漏洞之CNVD-2015-07557

目标系统的权限不够redis用户无法写计划任务和公钥,而且也没有开放ssh端口。 主从复制getshell,写入恶意的so文件达到执行系统命令的目的。 github上有一键可以利用的脚本 https://github.com/n0b0dyCN/redis-rogue-server.git 利用条件:需…

zabbix 简单介绍 及部署

目录 一 监控软件作用 1,生产环境常见框架 2,监控软件的必要性 3,常见监控软件 二 zabbix 简介 1,zabbix 是什么 2,zabbix 干什么 3,zabbix 组件 3.1 zabbix server 3.2 zabbix agent 4&a…

靠谱的婚恋平台有哪些?青藤之恋、二狗、百合网、珍爱网等深度测评

哇塞,恋爱和结婚对于年轻人来讲可是超级重要的大事呢!不过呀,找到一个稳稳当当的婚恋平台可不简单哟!那么,到底哪个婚恋平台最靠得住呢? 丛丛: 这可是我用了好久好久的脱单交友小程序嘞&#xf…

FMC总线应用控制32路高速IO扩展

FMC总线应用控制32路高速IO扩展 FMC的块区分配举例扩展IO驱动LED应用FMC驱动配置MPU配置扩展IO配置FMC并口访问时序应用 仅供个人学习,来源于armfly。 为什么要做 IO 扩展,不是已经用了 240 脚的 H743XIH6 吗?因为开发板使用了 32 位 SDRAM 和…

C++ 编译器中对 use after free 的检查示例

意图&#xff1a;检查源代码中是否存在某些地址&#xff0c;在free掉之后还对其进行了访问。 1, 示例远代码 cat hello_sani.cpp #include <iostream>using namespace std;int main(int argc, char **argv) {int i 1;int *A new int[12];cout <<"newed …

TCP/IP协议—HTTP

TCP/IP协议—HTTP HTTP协议HTTP通讯特点HTTP通讯流程 HTTP请求报文请求方法 HTTP应答报文状态码 HTTP协议 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一种请求-响应的协议&#xff0c;用户可以通过HTTP向服务器上传、下载数据。HT…

ESP32嵌入式物联网开发实战笔记-C编程基础知识点【doc.yotill.com】

乐鑫ESP32入门到精通项目开发参考百例下载&#xff1a; 链接&#xff1a;百度网盘 请输入提取码 5.1 C 语言基础知识复习 本节我们给大家介绍一下 C 语言基础知识&#xff0c;对于 C 语言比较熟练的开发者&#xff0c;可以跳过此节&#xff0c;对于基础比较薄弱的开发者&…

JVM概述

JVM概述 1、一些性能上的问题 我好好运行的线上系统突然间卡死了&#xff0c;系统无法访问&#xff0c;当然这个原因非常多&#xff1b;想解决线上的JVM GC问题却无从下手&#xff1b;新的项目上线了&#xff0c;对于各种JVM参数的设置一脸茫然&#xff0c;全部直接默认&…

从头开始构建自己的 GPT 大型语言模型

图片来源&#xff1a; Tatev Aslanyan 一、说明 我们将使用 PyTorch 从头开始构建生成式 AI、大型语言模型——包括嵌入、位置编码、多头自注意、残差连接、层归一化&#xff0c;Baby GPT 是一个探索性项目&#xff0c;旨在逐步构建类似 GPT 的语言模型。在这个项目中&#xff…

Unity HDRP Water Surface 水系统 基础教程

Unity HDRP Water Surface 水系统 基础教程 Unity Water SurfaceUnity 项目创建Unity Water Surface&#xff1a;Ocean&#xff08;海洋&#xff09;简介Ocean&#xff1a;Transform、GeneralOcean&#xff1a;Simulation&#xff08;仿真模拟&#xff09;Ocean&#xff1a;Sim…

pnpm - Failed to resolve loader: cache-loader. You may need to install it.

起因 工作原因需要研究 vue-grid-layout 的源码&#xff0c;于是下载到本地。因为我习惯使用 pnpm&#xff0c;所以直接用 pnpm i 安装依赖&#xff0c;npm run serve 启动失败。折腾了一番没成功。 看到源码里有 yarn.lock&#xff0c;于是重新用 yarn install 安装依赖&…

多模态大语言模型综述

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…