Java:IO
首
java.io中有百万计的类,如何找到自己需要的部分?
流
IO涉及到一个“流”stream的概念,可以简单理解成数据从一个源头到一个目的地。明白数据从哪来,要到哪里去,数据流中是字节还是字符之后,才能找到自己需要的类。
字节流
根据流中内容可以分为字节流(一般处理二进制数据)和字符流(一般处理文本数据)。
字节流的两个基类:InputStream和OutputStream,分别表示流的源头和流的目的地。如FileInputStream表字节流的源头是文件,即从文件中拿数据。FileOutputStream表字节流的目的地是文件,即向文件中输送。
此外,为了让流具有缓冲作用,还提供了BufferedInputStream和BufferedOutputStream。
比如将一个对象序列化进文件:
FileOutputStream fs = new FileOutputStream("file.ser");
ObjectOutputStream os = new ObjectOutputStream(fs); //obj通过ObjectOutputStream向fs输出os.writeObject(obj);
将数据装入文件,流的目的地是文件,故选择FileOutputStream。流中内容为字节,而要输入的数据是对象,为了将对象向字节进行转换,插入了ObjectOutputStream。当对象进入ObjectOutputStream后,obj会被转为字节,之后字节进入FileOutputStream流,最终“流”向文件。
可以看到,每个stream都有自己的功能,我们只需要拼接它们就好了。
字符流
当处理文本数据时,使用字符流。两个基类Reader和Writer,分别表示流的源头和目的地。如FileReader表字符流的源头是文件,即从文件中读数据。FileWriter表字符流的目的是文件,即向文件写数据。
除了提供了缓冲功能BufferedReader和BufferedWriter外,还提供了InputStreamReader和OutputStreamWriter用来将InputStream和OutputStream转为Reader和Writer,方便进行文本处理。
例如,从一个socket中读取文本:
Socket soc = new Socket("xx", xx);
InputStreamReader ir = new InpuStreamReader(soc.getInputStream());
BufferedReader br = new BufferedReader(ir)
String msg = br.readLine()
从socket读取数据,即socket向流中输入数据,流的源头是socket,故要获取socket的输入流。因为我们要读取文本内容,而不想读取字节数据,故通过InputStreamReader将字节流转为字符流。
为了让流具有缓冲作用,再接上BufferedReader,之后便可以从流中读取数据了。
那向socket中发送文本数据呢?
可以把上面的数据改改,Input改成Output,reader改成writer。这里说另一个类PrintWriter,类重载了很多构造方法,能够接受String,File,OutputStream以及Writer,流内数据类型的转换自己可以完成,且自带缓冲。
Socket soc = new Socket("xx", xx);
PrintWriter pw = new PrintWriter(soc.getOutputStream());
pw.println("xx")
尾
流需要考虑三个方面:数据从哪来,数据到哪去,流中数据的类型。之后再根据自己的业务需求将不同功能的流拼接即可。
结

相关文章:
Java:IO
首 java.io中有百万计的类,如何找到自己需要的部分? 流 IO涉及到一个“流”stream的概念,可以简单理解成数据从一个源头到一个目的地。明白数据从哪来,要到哪里去,数据流中是字节还是字符之后,才能找到自…...
ubuntu安全加固
知识背景: 项目背景: 常用命令: useradd: adduser: getent passwd: getent group: id username: adduser newname sudo: 修改shell为/bin/bash 新用户默认为/bin/sh,可以通过echo $SHELL查询,默认不能使用TAB…...
【MySQL】数据库的开始
前言 数据库是我们学习编程中一个非常重要的内容,像一些什么什么管理系统,如果想要存储数据都是需要连接数据库的。博主之前写过一篇图书管理系统的博客,那时的我还没接触过数据库,所有的数据都是现成创建的,感兴趣的…...
线性稳压电路和开关稳压电路
稳压二极管稳压电路 电网电压增大,导到u1端的电压增大,从而使输出电压,稳压二极管两端的电压增大,稳压二极管两端电压增大,使流过的电注增大。那么,流过线性电阻R的总电流增大。 Ur电压增大,从…...
Leetcode:找出峰值
普通版本 题目链接:2951. 找出峰值 - 力扣(LeetCode) class Solution { public:vector<int> findPeaks(vector<int>& mountain) {int sz mountain.size();vector<int> newMountain;for(int i 1;i < sz-1;i){…...
简单微信企业群消息推送接口
群管理 群发送接口 POST: JSONURL http://localhost:65029/m/wxapi/sendwxmsg{ "nr":"试", --消息 "at":"wxid_y0k4dv0xcav622,wxid_y0k4dv0xcav622",--群wxid "key":"F98F354F1671A2D21BC78C76B95E96EB",--群k…...
超好用!图像去雾算法C2PNet介绍与使用指南
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
java中使用mysql的json字段(代码示例)
前言: 最近做了个小项目,第一次使用json类型的数据库字段,这篇博文讲下使用过程中遇到的问题(数据库框架使用MyBatisplus) 应用到项目中的方法: 数据库as_farmer_apply表中的json字段: 实体类…...
GitHub的原理及应用详解(三)
本系列文章简介: GitHub是一个基于Git版本控制系统的代码托管平台,为开发者提供了一个方便的协作和版本管理的工具。它广泛应用于软件开发项目中,包括但不限于代码托管、协作开发、版本控制、错误追踪、持续集成等方面。 GitHub的原理可以简单概括为,在本地创建一个仓库(r…...
Flutter 中的 Offstage 小部件:全面指南
Flutter 中的 Offstage 小部件:全面指南 在Flutter中,Offstage是一个用于控制子组件是否出现在屏幕上的布局小部件。通过Offstage,你可以轻松地将组件从屏幕上隐藏或显示,而不需要从widget树中移除它。这对于实现条件渲染、动画效…...
微信小程序中使用vantUI步骤
第一步,配置project.config.json 在setting中新增如下: "packNpmManually": true,"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./"}], 第…...
说一下 ACID 是什么?
ACID 是数据库事务的四个特性的首字母缩写,包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。 原子性(Atomicity&…...
深度解读 chatgpt基本原理
ChatGPT(Generative Pre-trained Transformer)是由OpenAI开发的一种大规模语言模型,基于Transformer架构,采用自监督学习和生成式预训练方法。以下是ChatGPT的基本原理的深度解读: ### 1. Transformer架构 Transforme…...
Oracle-修改用户名
1、项目背景 需要将导入一份最新的用户数据在tbl用户上,但需要将原来的tbl用户数据保留并能实现两个用户的比对。 2、解决思路 思路一:1)新建用户tbl_feng,导入数据;2)将两个用户换名称 3)比对 思路二&…...
张量 t-product 积(matlab代码)
参考文献:Tensor Robust Principal Component Analysis with a New Tensor Nuclear Norm 首先是文章2.3节中 t-product 的定义: 块循环矩阵: 参考知乎博主的例子及代码:(t-product与t-QR分解,另一篇傅里叶对…...
爬山算法教程(个人总结版)
背景与简介 爬山算法(Hill Climbing Algorithm)是一种用于解决优化问题的启发式搜索方法。它是一种局部搜索算法,通过不断尝试从当前解出发,在其邻域内寻找更优的解,直到无法找到更优解为止。该算法得名于其类似于登山…...
水电表远程抄表:智能化时代的能源管理新方式
1.行业背景与界定 水电表远程抄表,是随着物联网技术发展,完成的一种新型的能源计量管理方式。主要是通过无线传输技术,如GPRS、NB-IoT、LoRa等,将水电表的信息实时传输到云服务器,进而取代了传统人工当场抄水表。这种…...
物联网应用开发--STM32与机智云通信(ESP8266 Wi-Fi+手机APP+LED+蜂鸣器+SHT20温湿度传感器)
实现目标 1、熟悉机智云平台,会下载APP 2、熟悉新云平台创建产品,项目虚拟调试 3、掌握云平台生成MCU代码,并移植。机智云透传固件的下载 4、具体目标:(1)注册机智云平台;(2&…...
【高阶数据结构(七)】B+树, 索引原理讲解
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:高阶数据结构专栏⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习更多数据结构 🔝🔝 高阶数据结构 1. 前言2. B树讲解…...
ML307R OpenCPU 网络初始化流程介绍
一、网络初始化流程 二、函数介绍 三、示例代码 四、代码下载地址 一、网络初始化流程 模组的IMEI/SN获取接口可在include\cmiot\cm_sys.h中查看,SIM卡IMSI/ICCID获取接口可以在include\cmiot\cm_sim.h中查看,PDP激活状态查询可以在include\cmiot\cm_modem.h中查看 二、函…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
