数据输入输出流(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编码的字符,你可以尝试使用其他编码格式来读取文件。


总结

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

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

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

相关文章

【FreeRTOS】常用API接口

【FreeRTOS】常用API接口 为方便快速检索,这里只留下对应的接口名和功能注释,具体传参和使用方法拿函数名百度搜。 任务相关 xTaskCreate() //创建任务 vTaskDelete( NULL ); //删除任务,传入NULL为删除当前的任务 vTaskStartScheduler()&…

【微服务】spring读取配置文件多种方式深入详解

目录 一、前言 二、java配置文件介绍 2.1 java配置文件产生原因 2.2 项目使用配置文件好处 2.3 springboot项目配置文件的必要性 2.4 微服务架构下配置文件使用场景 三、java读取配置文件常用方法 3.1 使用Properties类读取配置文件 3.1.1 使用getResourceAsStream读取…

时序分析基础(6)——input delay时序分析

1 简介 FPGA对于外部的时钟以及数据的延时信息是不知道的,在低速时钟且时钟发射沿在数据正中心的时候,一般可以不做约束来直接使用。但是到了高速时钟或者双沿采样或者发射沿和数据对齐的情况下,这时候就需要告诉VIVADO外部的时钟与数据情况来…

多轴机械臂/正逆解/轨迹规划/机器人运动学/Matlab/DH法 学习记录03——机械臂运动学逆解

系列文章目录 本科毕设正在做多轴机械臂相关的内容,这里是一个学习机械臂运动学课程的相关记录。 如有任何问题,可发邮件至layraliufoxmail.com问询。 1. 数学基础 2. 机械臂几何法与DH表示法 3. 机械臂运动学逆解 文章目录 系列文章目录一、引言1.手臂…

文件系统和软硬链接

文章目录 文件系统磁盘磁盘逻辑抽象inode 软硬链接软链接硬链接 文件系统 文件分为打开的文件和没有被打开的文件,而只有打开的文件是在内存的,也就是我们之前讲的,然而大部分文件都不是被打开的(当前不需要被访问的),它们都在磁…

硬盘日常使用中的注意事项

硬盘是计算机中的重要存储设备,负责存储大量的数据。为了确保数据的完整性和硬盘的寿命,日常使用中需要注意以下几点: 避免震动和撞击:硬盘在工作时,内部的磁盘正在高速旋转,任何轻微的震动或撞击都可能导致磁盘损坏或数据丢失。因此,使用硬盘时应确保计算机放置稳定,避…

输电线路运行特性及简单电力系统潮流估算(二)

本篇为本科课程《电力系统稳态分析》的笔记。 本篇为这一章的第二篇笔记。上一篇传送门,下一篇传送门。 输电线路的运行特性 输电线路的空载运行特性 线路的等值电路如图所示。 由于是空载,则 S ~ 2 0 \widetilde{S}_20 S 2​0,可以计算…

4月阿里offer被毁,我该怎么进字节?

在校招求职的浪潮中,有些故事总是让人唏嘘不已。比如最近在社交平台上广泛讨论的一个话题:“4月阿里offer被毁,我该怎么进字节?”这不仅反映了当下职场的变动性,也映射了求职者在面对突如其来的变故时的无助与挣扎。 …

QT 按钮的工具提示tooltips设置字体大小颜色与背景

QT 按钮的工具提示tooltips设置字体颜色与背景 main.cpp添加 mainwindow.cpp添加全局配置: 构造函数中: QToolTip::setFont(font3); //按钮提示信息通用设置 如下: MainWindow_oq::MainWindow_oq(QWidget *parent) : QMainWindow(parent)…

光伏电站智能勘探:无人机优势及流程详解

随着科技和互联网技术的不断发展,无人机在各个领域的应用越来越广泛,其中之一就是光伏电站智能勘探。利用无人机高清摄像头和传感器等设备,可以对光伏电站周边环境、日照情况、房屋状态进行全方面的勘探和记录,搭配卫星勘探、实地…

C语言中scanf、gets、fgets的区别

scanf、gets和fgets都是C语言中用于从标准输入读取数据的函数,但它们之间存在一些重要的差异: scanf: scanf是一个格式化输入函数,它可以根据指定的格式从标准输入读取数据。使用scanf读取字符串时,需要小心处理缓冲区…

springboot注解开发如何映射对象型数据

创作灵感 最近在帮学校写一款小程序时,有这样一个数据需要展示:一条申请记录,里面包含了申请时间、申请状态、申请所提供的六条活动记录等待,其中,申请所提供的六条活动记录为一个数组,数组中的每个元素又…

【BUG】Hexo|GET _MG_0001.JPG 404 (Not Found),hexo博客搭建过程图片路径正确却找不到图片

我的问题 我查了好多资料,结果原因是图片名称开头是_则该文件会被忽略。。。我注意到网上并没有提到这个问题,遂补了一下这篇博客并且汇总了我找到的所有解决办法。 具体检查方式: hexo生成一下静态资源: hexo g会发现这张图片…

二维码门楼牌管理应用平台建设:网格化管理的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、二维码门楼牌管理应用平台的功能特点三、二维码门楼牌管理应用平台的实际应用四、二维码门楼牌管理应用平台的前景展望 前言 随着信息技术的飞速发展,二维码门楼牌管理应用平台的建设已成为城市网格化管理…

李廉洋:4.20国际黄金,原油本周行情分析及下周一走势分析。

荷兰国际银行表示,所谓的美国国债期限溢价的回升,将为10年期国债收益率重返5%的关键水平铺平道路。从理论上来说,可将10年期美债收益率拆解为未来短端利率的期望期限溢价(term premium)。所谓期限溢价,是对投资者持有长期债券的风…

第十四届蓝桥杯省赛C/C++大学B组真题-飞机降落

思路&#xff1a;根据数据范围N<10猜测用DFS剪枝&#xff0c;因为菜狗不会状压dp。根据题目&#xff0c;一般这种飞机的题都会用到贪心的思想。思想是每架飞机都要卡极限最早降落时间&#xff0c;从而保证后面的飞机能够有充足时间降落。 代码参考博客MQy大佬有详细解答 #i…

深度学习之CNN

目录 我们为什么要用CNN&#xff0c;或者说究竟是因为什么我们要用CNN 卷积操作的实现原理 补充知识 torch.nn.Conv2d&#xff08;&#xff09; 注意 torch.nn.functional.conv2d&#xff08;&#xff09; torch.nn.functional.conv2d&#xff08;&#xff09;和torch.nn.…

Fannel和Calico

一 1、路由器下面每一个端口都是一个vlan,隔离了广播包 192.168.1.0和192.168.2.0他们属于不同的vlan,没有三层交换机或者路由器,他们通不了信 不在同一个vlan,也就是子网,包就会走向网关(也就是路由器那里,路由器有路由表。查看目的地192.168.2.0在b口,从b口出去vlan…

互联网技术知识点总览——算法和数据结构

简介 本文对算法和数据结构的知识点整体框架进行梳理和分享如下&#xff1a;

Ubuntu无法安装向日癸15.2.0.63062_amd64.deb最新版

Ubuntu安装向日葵远程控制 安装包下载 安装方式 方式一&#xff1a;运行安装包安装 方式二&#xff1a;终端命令安装 通过以下教程可以快速的安装向日葵远程控制&#xff0c;本教程适用于Ubuntu18.04/20.04/22.04 安装包下载 进入向日葵远程控制下载官网下载向日葵远程控制Lin…