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

JavaWeb基础(一)-IO操作

Java I/O工作机制:

注:简要笔记,示例代码可能较少,甚至没有。

1、Java 的 I/O 类库的基本架构。

​ Java 的 I/O 操作类在包 java.io 下,大概有将近80个类,这些类大概可以分为如下四组。

  • 基于字节操作的 I/O 接口:InputStream 和 OutputStream 。
  • 基于字符操作的 I/O 接口:Writer 和 Reader 。
  • 基于磁盘操作的 I/O 接口:File。
  • 基于网络操作的 I/O 接口:Socket。

1.1、基于字节的 I/O 操作接口

​ 基于字节的 I/O 操作接口输入和输出分别是:InputStream 和 OutputStream 。InputStream 的类层次如下:

在这里插入图片描述

​ 输入流根据数据类型和操作方式又被划分为若干个子类,每个子类分别处理不同操作类型。OutputStream 的类层次结构也类似,如下图:

在这里插入图片描述

1.2、基于字符的 I/O 操作接口

​ 下图是写字符的 I/O 操作接口涉及的类,Writer 类提供了一个抽象方法 write(char cbuf[],int off,int len)。

在这里插入图片描述

​ 读字符的操作接口也有类似的结构,如下图:

在这里插入图片描述

​ 读字符的操作接口是 int read(char cbuf[],int off,int len),。返回读到的n个字节数,不管是 Writer 还是 Reader 类,它们都只定义了读取或写入的数据字符的方式,也就是怎么写或读。

1.3、字节与字符的转化接口

​ 字符到字节需要转化,其中,读的转化过程如下:

在这里插入图片描述

​ InputStreamReader 类是字节到字符的转化桥梁,InputSream 到 Reader 的过程要指定编码字符集,否则将采用操作系统默认字符集,很可能会出现乱码问题。SteamDecoder 正是完成字节到字符的解码的实现类。类似如下代码读到一个文件时:

try {StringBuffer str = new StringBuffer();char[] buf = new char[1024];FileReader f = new FileReader("file");while (f.read(buf) > 0) {str.append(buf);}str.toString();}catch (IOException e){}

​ FileReader 类就是按照上面的工作方式读取文件的,FileReader 继承了 InputStramReader 类,实际上时读取文件流,然后通过 StreamDecoder 解码成 char ,只不过这里的编码字符集时默认字符集。

​ 写入也是类似的过程:

在这里插入图片描述

​ 通过 OutputStreamWriter 类完成字符到字节的编码过程,由 StreamEncoder 完成编码过程。

2、磁盘 I/O 工作机制:

2.1、几种访问文件的方式

  1. 标准访问文件方式。
  2. 直接 I/O 方式。
  3. 同步访问文件方式。
  4. 异步访问文件方式。
  5. 内存映射方式。

2.2、Java 访问磁盘文件

​ 当传入一个文件路径时,将会根据这个路径创建一个 File 对象来表示这个文件,然后根据这个 File 对象创建真正读取文件的操作对象,这时将会真正创建一个关联真实存在的磁盘文件的文件描述符 FileDescriptor,通过这个对象可以直接控制这个磁盘文件,。

在这里插入图片描述

2.3、Java 序列化技术

​ Java 序列化就是将一个对象转化为一串二进制表示的字节数组,通过保存或转移这些字节数据来达到持久化的目的。需要持久化,对象必须继承 java.io.Serializable 接口。反序列化则是相反的过程,将这个字节数组再重新构造成对象。我们知道反序列化时,必须有原始类作为模板,才能将这个对象还原,从这个过程我们可以猜测,序列化的数据并不像 class 文件那样保存类的完整的结构信息。下面是一个简单的序列化的代码:

public class Serialize implements Serializable {private static final long serialVersionUID = - 6849794470754660011L;public int num = 1390;public static void main(String[] args) {try {FileOutputStream fos = new FileOutputStream("d:/serialize.dat");ObjectOutputStream oos = new ObjectOutputStream(fos);Serialize serialize = new Serialize();oos.writeObject(serialize);oos.flush();oos.close();} catch (IOException e) {e.printStackTrace();}}
}

​ 序列化的文件二进制字节数据如下:

在这里插入图片描述

  1. 第一部分是反序列化文件头。

    在这里插入图片描述

  2. 第二部分是要反序列化的类的描述,在这里是 Serialize 类。

    在这里插入图片描述

  3. 第三部分是对象中各个属性项的描述

    在这里插入图片描述

  4. 第四部分输出该对象的父类信息描述,这里没有父类,如果有,数据格式与第二部分一样。

    在这里插入图片描述

  5. 第五部分输出对象的属性项的实际值,如果属性项是一个对象,那么这里还将序列化这个对象,规则和第二部分一样。

    在这里插入图片描述

相关文章:

JavaWeb基础(一)-IO操作

Java I/O工作机制: 注:简要笔记,示例代码可能较少,甚至没有。 1、Java 的 I/O 类库的基本架构。 ​ Java 的 I/O 操作类在包 java.io 下,大概有将近80个类,这些类大概可以分为如下四组。 基于字节操作的…...

拼多多(PDD)社招一面原题

未成年游戏退费 5 月 28 日,中国互联网协会发布《未成年人网络游戏服务消费管理要求(征求意见稿)》团体标准。 该标准是游戏行业首个完整的消费管理规范,可用于未成年人游戏消费退费纠纷解决,也可为相关行政部门、司法…...

类中使用QtConcurrent::run

在QtConcurrent::run中调用类的成员函数时,你需要注意几个关键点: 对象生命周期:你需要确保在QtConcurrent::run调用的整个期间,类对象都是有效的。如果对象在成员函数执行期间被销毁,将会导致未定义行为。成员函数访…...

基于深度学习的中文情感分析系统python flask

基于python的毕业设计 基于深度学习的中文情感分析系统(flask)(源码说明文档演示) 毕业设计课程设计期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目…...

Mysql联合索引

对mysql联合索引的认识 文章目录 对mysql联合索引的认识最左原则匹配一、最左匹配的原理?二、实战 最左原则匹配 所谓最左原则指的就是如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配&#xff…...

Linux基础指令用户管理003

继Linux基础指令002我们讲了如何设置用户密码以及修改用户信息,我们讲一下高级用户管理。 操作系统 CentOS Stream 9 高级用户管理 visudo 用于普通用户临时提升权限执行命令,如下图 [yylocalhost ~]$ cp -av /etc/passwd{,_bak} /etc/passwd ->…...

java图书电子商务网站的设计与实现源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的图书电子商务网站的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 图书电子商…...

全球首个多语种手语视频生成模型诞生:SignLLM

近日,一项名为 SignLLM 的新型 AI 技术取得了突破性进展,或将彻底改变听障人士的沟通方式。作为全球首个多语种手语生成模型,SignLLM 能够将输入的文本或语音指令,实时转化为对应的手语手势视频,为打破语言障碍、促进信…...

初学C语言100题:经典例题节选(源码分享)

1.输出10000以内所有完数 完数的概念 一个正整数的所有因子&#xff08;除了自身以外的约数&#xff09;的和恰巧等于它本身 #include <stdio.h>int main() {int i 0;for (i 2; i < 10000; i)//生成1到10000之间的数{int j 0;int sum 0;//注意这里的sum每次循环结…...

C++设计模式之策略模式、迭代器模式、适配器模式、工厂模式、超级工厂模式、享元模式、代理模式

文章目录 一、介绍1.毫无价值的使用虚函数例子 二、策略模式1.策略模式2.多重策略与迭代器模式3.不要什么东西都塞一块 三、适配器模式1.跨接口的适配器2.跨接口的适配器 四、工厂模式1.工厂模式2.超级工厂模式3.RAII 自动管理内存4.工厂模式实战 五、享元模式1.享元模式2.代理…...

18 js时间对象

时间对象是一种复杂数据类型&#xff0c;用来存储时间 创建时间对象 内置构造函数创建 语法&#xff1a;var 时间名new Date() var datenew Date()console.log(date) //Wed May 29 2024 16:03:47 GMT0800 (中国标准时间) 创建指定日期 当参数为数字——>在格林威治的时间基…...

安卓赤拳配音v1.0.2Ai配音神器+百位主播音色

Ai配音神器 本人自用版本&#xff01;超级稳定&#xff01;百位主播音色 登陆即可用 链接&#xff1a;https://pan.baidu.com/s/1WVsrYZqLaPAriHMMLMdPBg?pwdz9ru 提取码&#xff1a;z9ru...

前端面试题日常练-day40 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末 1. Bootstrap 的栅格系统是基于&#xff08; &#xff09;进行布局的。A. 像素 B. 百分比 C. 媒体查询 2. 在 Bootstrap 中&#xff0c;要创建一个按钮&#xff0c;可以使用&#xff08; &#xff…...

UG NX二次开发(C#)-UFun函数-利用UFPart.Export导出模型中的对象并创建一个新的part

文章目录 1、前言2、UF_PART_export函数定义3、UF_PART_export_with_options函数定义4、代码1、前言 在UG NX 10.0二次开发中,需要用到将装配体中通过几何建模创建的对象独立创建一个part文件,所以查找了下UFun函数,即是UF_PART_export 和UF_PART_export_with_options两个函…...

SFOS2:组件介绍

一、前言 在sailfish os application的开发过程中&#xff0c;几乎是困难重重&#xff0c;因为我暂未找到具有完整性、指导性、易懂性的开发文档&#xff0c;特别是组件的使用&#xff0c;现决定将自己的探究结果记录下来。因此&#xff0c;这篇文章只会具有参考价值&#xff0…...

交换机的三层交换技术

现有pc1与pc2不在同一个网段之下&#xff0c;通过交换机相连接。 进人交换机1&#xff0c;创建两个vlan 10和vlan 20 &#xff0c;进入串口2设置串口模式为access&#xff0c;并且设置默认vlan为10.进入串口3设置串口模式为access&#xff0c;并且设置默认vlan为20. 进入串口1…...

探秘URL的奥义:JavaScript中轻松获取页面参数值的N种姿势【含代码示例】

探秘URL的奥义&#xff1a;JavaScript中轻松获取页面参数值的N种姿势【含代码示例】 URL基础知识补给站基础案例&#xff1a;直接解析URL案例一&#xff1a;使用URLSearchParams案例二&#xff1a;传统字符串分割法 高级策略&#xff1a;动态与安全案例三&#xff1a;封装与模块…...

VSCode小技巧,忽略不想格式化的代码行

零&#xff0e;格式化工具文档 1 . Black Ignoring sections功能 2 . autopep8 disabling-line-by-line功能&#xff1b;&#xff1b;–line-range选项 3 . Prettier prettier-ignore功能(例&#xff1a;适用于JS的// prettier-ignore&#xff0c;适用于CSS的/* prettier-igno…...

揭秘网络编程:同步与异步IO模型的实战演练

摘要 ​ 在网络编程领域&#xff0c;同步(Synchronous)、异步(Asynchronous)、阻塞(Blocking)与非阻塞(Non-blocking)IO模型是核心概念。尽管这些概念在多篇文章中被广泛讨论&#xff0c;它们的抽象性使得彻底理解并非易事。本文旨在通过具体的实验案例&#xff0c;将这些抽象…...

在Visual Studio Code和Visual Studio 2022下配置Clang-Format,格式化成Google C++ Style

项目开发要求好的编写代码格式规范&#xff0c;常用的是根据Google C Style Guide 网上查了很多博文&#xff0c;都不太一样有的也跑不起来&#xff0c;通过尝试之后&#xff0c;自己可算折腾好了&#xff0c;整理一下过程 背景&#xff1a; 编译器主要有三部分&#xff1a;前…...

解锁光猫配置自由:中兴ONT解密工具完全指南

解锁光猫配置自由&#xff1a;中兴ONT解密工具完全指南 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 你是否曾经因为无法修改光猫设置而感到束手无策&#xff1f;当运营…...

OpenClaw 底层原理分析

OpenClaw 底层原理深度分析 OpenClaw 是一个智能体编排平台,它的核心设计哲学是 “模型无关、工具优先、记忆驱动”。让我从架构、数据流、核心机制三个维度为你拆解。 🏗️ 一、整体架构 OpenClaw 采用 分层解耦 架构,可以理解为“AI 操作系统”: text ┌──────…...

当3D高斯遇上AIGC:手把手拆解G4SPLAT如何用视频扩散模型修复未观测区域

当3D高斯遇上AIGC&#xff1a;G4SPLAT如何用生成式AI重塑三维重建 在计算机视觉领域&#xff0c;三维场景重建一直是个令人着迷又充满挑战的问题。想象一下&#xff0c;你手持手机在房间里随意拍摄几段视频&#xff0c;AI就能自动生成这个房间的完整三维模型——包括那些你根本…...

PyFluent:重新定义CFD仿真自动化的技术革命

PyFluent&#xff1a;重新定义CFD仿真自动化的技术革命 【免费下载链接】pyfluent 项目地址: https://gitcode.com/gh_mirrors/pyf/pyfluent 行业痛点分析&#xff1a;CFD工程师的效率困境 在现代工程设计流程中&#xff0c;计算流体动力学&#xff08;CFD&#xff09…...

斯坦福邱肖杰:自动化组学发现的可进化多智能体框架

摘要 大型语言模型驱动的自主智能体系统与单细胞生物学的融合&#xff0c;有望推动生物医学发现领域的范式转变。然而&#xff0c;现有生物智能体系统基于单智能体架构构建&#xff0c;要么功能单一、要么过于泛化&#xff0c;仅适用于常规分析。本文介绍&#xff11;种可进化…...

Android开发职位深度解析与面试指南

引言 Android开发作为移动应用开发的核心领域,近年来随着智能手机的普及和技术的迭代,已成为IT行业的热门职业方向。本文基于一份典型的Android开发职位描述展开,深入探讨其核心技能要求、经验门槛、工具使用等关键要素。职位描述强调了对Flutter、多线程、Framework、Andr…...

效率飙升:借助快马平台生成全自动OpenClaw本地部署一体化工具

最近在折腾OpenClaw的本地部署时&#xff0c;发现传统方式实在太费时间了。每次都要手动查文档、拼命令、调环境&#xff0c;经常卡在某个依赖项版本冲突上。后来尝试用InsCode(快马)平台生成了一体化部署工具&#xff0c;效率直接翻倍。这里分享下具体实现思路和优化点&#x…...

分布式电池管理系统:基于微控制器架构的智能电池保护与均衡解决方案

分布式电池管理系统&#xff1a;基于微控制器架构的智能电池保护与均衡解决方案 【免费下载链接】SmartBMS Open source Smart Battery Management System 项目地址: https://gitcode.com/gh_mirrors/smar/SmartBMS SmartBMS是一个开源的智能电池管理系统&#xff0c;专…...

Kettle错误处理实战:如何用表输出步骤捕获并存储ETL过程中的异常数据

Kettle错误处理实战&#xff1a;如何用表输出步骤捕获并存储ETL过程中的异常数据 在数据仓库和ETL&#xff08;Extract, Transform, Load&#xff09;流程中&#xff0c;错误处理是确保数据质量的关键环节。Kettle&#xff08;现称Pentaho Data Integration&#xff09;作为一款…...

Windows下RedisInsight保姆级安装教程:从下载到连接Redis全流程详解

Windows平台RedisInsight全流程实战指南&#xff1a;从零搭建高效Redis可视化环境 Redis作为当下最流行的内存数据库之一&#xff0c;其强大的性能与丰富的数据结构深受开发者青睐。但在日常开发中&#xff0c;仅通过命令行操作Redis难免效率低下——这正是RedisInsight的价值所…...