当前位置: 首页 > news >正文

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:找出峰值

普通版本 题目链接&#xff1a;2951. 找出峰值 - 力扣&#xff08;LeetCode&#xff09; 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介绍与使用指南

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…...

java中使用mysql的json字段(代码示例)

前言&#xff1a; 最近做了个小项目&#xff0c;第一次使用json类型的数据库字段&#xff0c;这篇博文讲下使用过程中遇到的问题&#xff08;数据库框架使用MyBatisplus&#xff09; 应用到项目中的方法&#xff1a; 数据库as_farmer_apply表中的json字段&#xff1a; 实体类…...

GitHub的原理及应用详解(三)

本系列文章简介: GitHub是一个基于Git版本控制系统的代码托管平台,为开发者提供了一个方便的协作和版本管理的工具。它广泛应用于软件开发项目中,包括但不限于代码托管、协作开发、版本控制、错误追踪、持续集成等方面。 GitHub的原理可以简单概括为,在本地创建一个仓库(r…...

Flutter 中的 Offstage 小部件:全面指南

Flutter 中的 Offstage 小部件&#xff1a;全面指南 在Flutter中&#xff0c;Offstage是一个用于控制子组件是否出现在屏幕上的布局小部件。通过Offstage&#xff0c;你可以轻松地将组件从屏幕上隐藏或显示&#xff0c;而不需要从widget树中移除它。这对于实现条件渲染、动画效…...

微信小程序中使用vantUI步骤

第一步&#xff0c;配置project.config.json 在setting中新增如下&#xff1a; "packNpmManually": true,"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./"}], 第…...

说一下 ACID 是什么?

ACID 是数据库事务的四个特性的首字母缩写&#xff0c;包括原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;。 原子性&#xff08;Atomicity&…...

深度解读 chatgpt基本原理

ChatGPT&#xff08;Generative Pre-trained Transformer&#xff09;是由OpenAI开发的一种大规模语言模型&#xff0c;基于Transformer架构&#xff0c;采用自监督学习和生成式预训练方法。以下是ChatGPT的基本原理的深度解读&#xff1a; ### 1. Transformer架构 Transforme…...

Oracle-修改用户名

1、项目背景 需要将导入一份最新的用户数据在tbl用户上&#xff0c;但需要将原来的tbl用户数据保留并能实现两个用户的比对。 2、解决思路 思路一&#xff1a;1&#xff09;新建用户tbl_feng,导入数据&#xff1b;2&#xff09;将两个用户换名称 3&#xff09;比对 思路二&…...

张量 t-product 积(matlab代码)

参考文献&#xff1a;Tensor Robust Principal Component Analysis with a New Tensor Nuclear Norm 首先是文章2.3节中 t-product 的定义&#xff1a; 块循环矩阵&#xff1a; 参考知乎博主的例子及代码&#xff1a;&#xff08;t-product与t-QR分解&#xff0c;另一篇傅里叶对…...

爬山算法教程(个人总结版)

背景与简介 爬山算法&#xff08;Hill Climbing Algorithm&#xff09;是一种用于解决优化问题的启发式搜索方法。它是一种局部搜索算法&#xff0c;通过不断尝试从当前解出发&#xff0c;在其邻域内寻找更优的解&#xff0c;直到无法找到更优解为止。该算法得名于其类似于登山…...

水电表远程抄表:智能化时代的能源管理新方式

1.行业背景与界定 水电表远程抄表&#xff0c;是随着物联网技术发展&#xff0c;完成的一种新型的能源计量管理方式。主要是通过无线传输技术&#xff0c;如GPRS、NB-IoT、LoRa等&#xff0c;将水电表的信息实时传输到云服务器&#xff0c;进而取代了传统人工当场抄水表。这种…...

物联网应用开发--STM32与机智云通信(ESP8266 Wi-Fi+手机APP+LED+蜂鸣器+SHT20温湿度传感器)

实现目标 1、熟悉机智云平台&#xff0c;会下载APP 2、熟悉新云平台创建产品&#xff0c;项目虚拟调试 3、掌握云平台生成MCU代码&#xff0c;并移植。机智云透传固件的下载 4、具体目标&#xff1a;&#xff08;1&#xff09;注册机智云平台&#xff1b;&#xff08;2&…...

【高阶数据结构(七)】B+树, 索引原理讲解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:高阶数据结构专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多数据结构   &#x1f51d;&#x1f51d; 高阶数据结构 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中查看 二、函…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...