Java IO流动(实战操作)

目录

    • 1 IO流原理
    • 2 IO流的分类
    • 3 输入、输出流代码示例
    • 4 小结
    • 5 文件在前后台之间传递


在Java中,IO流是一种用于处理输入和输出操作的机制。它提供了一种统一的方式来读取和写入数据,平日开发中在文件读写,网络通信,特定场景的数据库操作,文本处理等地方会频繁使用IO流。

流最主要的功能就是输入、输出。最简单理解:

获取txt文本中内容到程序中处理叫输入流(Input),将程序处理完的内容写到txt文本中叫输出流(Output)。说白了一个负责读一个负责写。

1 IO流原理

IO流是基于流的概念,它将数据的输入和输出看作是一个连续的流。数据从一个地方流向另一个地方,流的方向可以是输入(读取数据)或输出(写入数据)。Java中的IO流分为字节流和字符流两种类型,分别用于处理字节数据和字符数据。

IO流的原理是通过流的管道将数据从源头传输到目标地。源头可以是文件、网络连接、内存等,而目标地可以是文件、数据库、网络等。IO流提供了一组丰富的类和方法来实现不同类型的输入和输出操作。

2 IO流的分类

Java中的IO流可以按照数据的类型和流的方向进行分类。

  1. 按数据类型分类
    • 字节流(Byte Stream):以字节为单位读写数据,适用于处理二进制数据,如图像、音频、视频等。常见的字节流类有InputStreamOutputStream
    • 字符流(Character Stream):以字符为单位读写数据,适用于处理文本数据。字符流会自动进行字符编码和解码,可以处理多国语言字符。常见的字符流类有ReaderWriter
  2. 按流的方向分类
    • 输入流(Input Stream):用于读取数据。输入流从数据源读取数据,如文件、网络连接等。常见的输入流类有FileInputStream、ByteArrayInputStream、SocketInputStream等。
    • 输出流(Output Stream):用于写入数据。输出流将数据写入到目标地,如文件、数据库、网络等。常见的输出流类有FileOutputStream、ByteArrayOutputStream、SocketOutputStream等。

分类继承结构图如下:
在这里插入图片描述

3 输入、输出流代码示例

开发过程中使用比较多的是InputStreamOutputStream,这两个类层级较高的父类,是抽象类,通常会创建其下的子类。

  • InputStream

    ByteArrayInputStreamStringBufferInputStreamFileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。下面一以FileInputStreamFileOutputStream为例。

  • OutputStream

    ByteArrayOutputStreamFileOutputStream是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据,

  1. FileInputStream案例

    字节输入流的步骤如下:

    1. 创建流对象
    2. 创建一个缓存字节的容器数组
    3. 读取数据
    4. 操作保存数据的数组
    5. 关闭流
    public void input() throws IOException {String fileName="D:\\file\\测试.txt";File file = new File(fileName);InputStream in = new FileInputStream(file);byte[] b = new byte[1024];//Reads some number of bytes from the input stream and stores them into the buffer array b.in.read(b);in.close();System.out.println(new String(b));
    }
    

    可以将文件转成流后,调用read()方法将流读取出来存到字节数组中,所存的字节数组作为参数传入,可以看到打印的正是文件中所写的内容
    在这里插入图片描述

  2. FileOutputStream案例

    将输出流写入文件的步骤如下:

    1. 选择流:创建流对象
    2. 准备数据源,把数据源转换成字节数组类型
    3. 通过流向文件当中写入数据
    4. 刷新流
    5. 关闭流
    public void output() throws IOException {String s = "hello";OutputStream out = new FileOutputStream("D:\\file\\输出.txt");byte[] bytes = s.getBytes();out.write(bytes);out.close();}
    

在这里插入图片描述

OutputStream是字节流,所以要先将输出内容转成字节数组,在通过write(byte [])方法写出去。

不要混淆了InputStream/OutputStream和File的功能

前两者只负责往文件中读写数据,只是以一种流的形式对数据内容进行多元化的操作,至于文件的生成,命名等一系列和文件整体相关的操作,是File类的责任。

还比较常用的是BufferInputStream缓冲流

缓冲流的好处:

缓冲流内部包含一个缓冲区域,默认8kb,每一次程序调用read方法其实都是从缓冲区域当中读取内容,如果读取失败就说明缓冲区域当中没有内容,那么就从数据源当中读取内容,然后会尽可能读取更多的字节放入到缓冲区域当中,最后缓冲区域当中的内容,会全部返回给程序。从缓冲区读取数据会比直接从数据源读取数据的速度快,效率也更高,性能更好。

简单说:

没有缓存区,那么每read一次,就会发送一次IO操作;
有缓存区,第一次read时,会一下读取x个字节放入缓存区,然后后续的read都会从缓存中读取,当read到缓存区末尾时,会再次读取x个字节放入缓存区。

处理流处理数据和节点流处理数据的方法基本上完全相同。

4 小结

流的读写其实很简单,且步骤比较固定,但是将文件转成流之后可操作性就变得很大很大。

一不可能直接对文件进行修改,但流是通用的,改变流的内容、形式再输出给文件,展示出来的效果就发生改变;

二是文件有可能很大,不可能将这么大的文件在网络上传递,就要转成流,一点一滴连续的传输。这就是为什么下载或上传过程中可以随意暂停、开始也不影响,因为只要保证这些点滴最终拼起来是完整的即可。

本文只演示了最简单的对txt文本格式的数据读写,原理是一样的,每一位数据都有唯一对应的字节码,可以从数据转成字节、从字节转成数据。所以才叫字节流。

但文件个格式多种多样,输出前必须要转成相同格式的流,就是在InputStreamOutputStream操作之间按照自己需求自定义操作。

5 文件在前后台之间传递

开发过程中经常需要将文件从前台传递给后台或后台传给前台,这步操作怎么实现?

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

老话题,火车票抢票助手,简化版 (漏洞已经失效^_^)

用了“二杠”兄弟的工具测试了抢票,先举个大拇指。牛!可是我实在看不惯他画的界面,而且需要认证和访问他服务器上的wcf服务。看到许多园友都号称“破解”了。我也请出"Reflector"神器,尝试了下。发现把源exe文件作为app…

python模拟火车订票系统_如何用python编写火车抢票助手

前几天跟朋友说打算写一个抢票助手,最后由于某些原因念头打消了。 可就在昨天晚上,才隐约记起一年前的自己曾经说过:一年后我一定要写一个12306的抢票助手!瞬间激情澎湃,甚至已经是快临近凌晨时便开始动工,…

无涯教程-Python机器学习 - Based on human supervision函数

Python机器学习 中的 Based on human s - 无涯教程网无涯教程网提供https://www.learnfk.com/python-machine-learning/machine-learning-with-python-based-on-human-supervision.html

Yolo系列-yolov3

YOLO-V3 这张图讲道理真的过分了!!!我不是针对谁,在座的各位都是 终于到V3了,最大的改进就是网络结构,使其更适合小目标检测特征做的更细致,融入多持续特征图信息来预测不同规格物体 先验框更丰…

java 分布式游戏服务器框架,集群游戏服务器框架,游戏服务器网关框架 ioGame 网络游戏服务器框架

网络游戏框架简介 ioGame 是一个由 java 语言编写的网络游戏服务器框架。支持 websocket、tcp ,适用于全球同服、回合制游戏、策略游戏、即时战斗等游戏服务器的开发。具有高性能、稳定、易用易扩展、超好编程体验等特点。可做为 H5、手游、端游的 java 游戏服务器…

游戏服务器架构通识

前言 这节讲座里,我们将从游戏服务器发展的简单历程出发,鸟瞰一下目前大多数的游戏服务器架构。 这里尽可能的避免陷入细节的技术问题,而是从技术进化的结果状态,反推原始问题是什么。希望能通过这个过程,解释清楚游戏…

游戏服务器架构设计整理

文章目录 前言一、单进程多线程的服务器设计模式,只有一个进程,但一个进程包好多个线程二、多进程单线程的服务器设计模式,多个进程,每个进程只有一个线程1.早期的MMORPG服务器结构2.中期-用户分离集群式3.中后期数据分离集群式4.…

游戏服务器被攻击了怎么办?

随着互联网的发展,网民数量激增,电子游戏的普及,庞大的玩家数量必然推动游戏市场发展。游戏受到攻击是游戏开发者的痛点,DDOS攻击是流量攻击的一个总称,还包括SYN Flood、ACK Flood、UDP Flood、TCP Flood、ICMP Flood…

经典游戏服务器端架构

文章目录 一、 讨论的背景二、 游戏服务器架构的要素三、核心的三个架构四、 游戏服务器模型的进化历程五、分服模型1.模型描述2.调度架构1.单进程游戏服务器2.多进程游戏服务器 3.内存架构1.动态内存2.预分配内存 4.进程间通讯手段1.Socket通讯2.消息队列3.远程调用 5.容灾和扩…

哪家的云游戏服务器好?如何选择云游戏服务器?

现如今,不少行业领域都对云服务器有不少的需求,尤其是游戏行业,需要专门的云游戏服务器。目前市场上的云游戏服务器有很多种类型,那么,哪家的云游戏服务器好呢?如何选择云游戏服务器?下面就跟着…

游戏开发商如何租用合适稳定的游戏服务器?

随着互联网的快速发展,网络游戏的发展令人目不暇接。有些游戏开发商在开发游戏时,对游戏服务器的要求非常高,毕竟一款游戏最重要的是流畅度。如果大量用户在玩游戏,而游戏直接因为服务器的宕机而崩溃,这种体验可能会直…

游戏服务器开发

1 2-课程概述 https://www.bilibili.com/video/BV1Ks41177oi?fromsearch&seid5543458349378694564nodejs lua STL IO 语言方面 精简 不像Python 无统一 游戏服务器 工作量 不是 网络连接 是 逻辑的 实现 定义 一个 struct 有两个成员 指针 和 值 …

从零开始搭建游戏服务器 第一节 创建一个简单的服务器架构

目录 引言技术选型正文创建基础架构IDEA创建项目添加Netty监听端口编写客户端进行测试 总结 引言 由于现在java web太卷了,所以各位同行可以考虑换一个赛道,做游戏还是很开心的。 本篇教程给新人用于学习游戏服务器的基本知识,给新人们一些…

鹅厂公开课:游戏服务器,了解一下?

讲师简介:张正,腾讯互娱北极光工作室群专家工程师,拥有12年游戏后台开发经验,主导和参与了《天涯明月刀》、《轩辕传奇》等自研大型MMORPG项目的后台开发,现担任《天涯明月刀》项目后台技术总监,北极光后台…

游戏服务器的那些事儿

游戏程序开发有两个大方向,包括前端和后端。其中,前端是指客户端方面,包括PC、手机和平板上面的可视化图形技术。后端则偏向于服务器,即用户不可见的部分。本文将通过游戏服务器的起源、功能特点、分类和发展历史,以及…

〔017〕Stable Diffusion 之 常用模型推荐 篇

✨ 目录 🎈 模型网站🎈 仿真系列🎈 国风系列🎈 卡通动漫系列🎈 3D系列🎈 一些好用的lora模型 🎈 模型网站 由于现在大模型超级多,导致每种画风的模型太多,那么如何选择最…

通达信形态匹配选股,不会编写指标公式也可以形态选股

编写指标公式匹配技术形态难度比较高,公式也很复杂,新手往往难以掌握,即使是老手也常常感到困难。之前编写了N字形态、W底(双底)、头肩底,虽然成功完成,但工作量巨大,公式理解起来也…

python函数学习

def add(num1,num2):resultnum1num2print(f"函数add输出的结果是{result}")return result resultadd(int(num1), int(num2)) print(f"调用def add(num1,num2):这个函数最终返回的结果是: {result}")# 函数返回值 ②无返回值(也就是说是返回值类…

【python】python智能停车场数据分析(代码+数据集)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

Linux驱动之platform设备驱动

目录 前言 一、Linux驱动的分离与分层 二、开发环境 三、驱动程序编写 3.2 platform 驱动模块程序 3.3 测试app程序 四、运行测试 4.1 编译 4.2 运行测试 前言 前面几章编写的设备驱动都非常的简单,都是对 IO进行最简单的读写操作。像 I2C、SPI、 LCD 等这…