《On Java进阶卷》阅读笔记(五)
第7章 IO系统
I/O流:
IO有很多不同的来源和去处,如文件、控制台网络连接等,而且还涉及需求以很多种方式,如顺序读取、随机访问、缓冲、字符、按行读取、按字读取等。
Java8的函数式流相关的类和IO流之间并无关联。
IO流隐藏了实际的IO设备中数据情况的下列细节:
- 字节流用于处理原始的二进制数据。
- 字符流用于处理字符数据。它会自动处理和本地字符集间的相互转换。
- 缓冲区流提升了性能。它通过减少调用本地API的次数,优化了输入和输出。
输入里read()方法,用于从字节数组中读取单个字节或字节数组。
输出里write()方法,用于写入单个字节或字节数组。
各种InputStream类型:
- 字节数组
- 字符串对象
- 文件
- 管道
- 其他流组成的序列,这样可以将这些流合并成单个流。
- 其他源,例如外部网络连接。
类
功能
使用方法
ByteArrayInputStream
使内存中的缓冲区可以充当InputStream
作为一种数据源:通过将其连接到FilterInputStream对象来提供有用的接口
StringBufferInputStream
将字符串转换为InputStream
作为一种数据源:通过将其连接到FilterInputStream对象来提供有用的接口
FileInputStream
用于从一个文件中读取信息
作为一种数据源:通过将其连接到FilterInputStream对象来提供有用的接口
PipedInputStream
用于生成写入到对应的PipedOutputStream中的数据。它实现了管道传输的概念
作为一种多线程形式数据源:通过将其连接到FilterInputStream对象来提供有用的接口
SequenceInputStream
将两个以上的InputStream转换为单个InputStream
作为一种数据源:通过将其连接到FilterInputStream对象来提供有用的接口
FilterInputStream
作为装饰器接口的抽象类,装饰器用来为其他InputStream类提供有用的功能。
各种OutputStream类型:
类
功能
使用方法
ByteArrayOutputStream
在内存创建一块缓冲区,所有发送到流中的数据都被放在该缓冲区
用于指定数据的目的地:通过将其连接到FilterOutputStream对象来提供有用的接口
FileOutputStream
用于向文件发送信息
用于指定数据的目的地:通过将其连接到FilterOutputStram对象来提供有用的接口
PipedOutputStream
向其中写入的任何信息都将自动作为对应的PipedInputStream的输入。实现了管道传输的概念。
用于为多线程制定数据的目的地:通过将其连接到FilterOutputStream对象来提供有用的接口
FilterOutputStream
作为装饰器接口的抽象类,装饰器用来为其他OutputStream类提供有用的功能
各种FilterInputStream类型:
类
功能
使用方法
DataInputStream
与DataOutputStream配合使用,以可移植的方式从流中读取基本类型,int、char、long等
包含用于读取基本类型的全部接口
BufferedInputStream
用于防止在每次需要更多数据时都进行物理上的读取。相等于声明使用缓冲区
这本质上并为提供接口,只是为进程增加缓冲操作而已,需要与接口对象搭配使用
LineNumberInputStream
记录输入流中的行号,可以调用getLineNumber()和setLineNumber(int)
只是增加了行号而已,因此可能需要与借口对象搭配使用
PushbackInputStream
包含一个单字节回退缓冲区,用于将最后读取的字符推回输入流
通常用于编译器的扫描器,一般不会用到
各种FilterOutputStream类型:
类
功能
使用方法
DataOutputStream
与DataInputStream搭配使用没这样就能以可移植的方式向流中写入基本类型
包含用于写入基本类型数据的全部接口
PrintStream
用于生成格式化的输出。DataOutputStream负责处理数据的存储,而PrintStream则负责处理数据的显示
应该作为OutputStream对象的最终包装,可能会经常用到
BufferedOutputStream
用来防止在每次发送数据的时候都发生物理写操作,相当于声明使用缓冲,可以调用flush方法来清空缓冲区
本质上并未提供借口,只是为进程增加缓冲操作而已,需要与借口对象搭配使用
独立的RandomAccessFile:
RandomAccesssFile适合用来处理由大小已知的记录组成的文件,由此可以通过seek方法在各条记录上来回移动,然后读取或者修改记录。文件中各条记录的大小不必相同,只需确定它们的大小以及在文件中的位置即可。
它是一个从零实现的、完全独立的类、有着完全属于自己、大部分是原生的方法,其行为和其他IO类型有本质上的区别。
IO流用法:
- 缓冲输入文件,BufferdReader
- 从内存输入,StringReader
- 格式化的内存输入
- 基本的文件输出
- 存储和恢复数据
- 读写随机访问文件
标准IO:
程序的所有输入都可以来自标准输入,所有输出都可以发送到标准输出,所有错误都可以发送到标准错误。
一个程序的标准输出可以称为另一个程序的标准输入。
新IO系统:
新IO库的目标只有一个:速度。
速度的提升来自于其所使用的更接近于操作系统的IO实现方式的结构:通道和缓冲区。
通道其实很简单:向其传入一个用于读写的Bytebuffer,然后锁住问区域以保证独占式访问。
FileChannel类,在旧IO系统中的类通过getChannel方法得到。
public class IOTest {public static void main(String[] args) {ByteBuffer byteBuffer = ByteBuffer.allocate(1024);try {FileInputStream inputStream = new FileInputStream("");FileChannel channel = inputStream.getChannel();channel.read(byteBuffer);channel.write(byteBuffer);channel.lock();channel.tryLock();} catch (IOException e) {e.printStackTrace();}}
}
一旦调用了通道的read方法,就必须在缓冲区上调用flip方法,使缓冲区做好提取字节的准备。并且如果要用缓冲区来做进一步的read操作,就同样需要调用clear方法来让缓冲区为后续的每次read做好准备。
缓冲区中保存着简单的字节,为了将这些字节转换为字符,要么将字节放入的时候进行编码,要么在将他们从缓冲区中读取出来的时候进行解码。
ByteBuffer是由一个8字节的数组包装而成的,随后通过各种不同基本类型的师徒缓冲区将该数组显示出来。
字节序:不同的机器可以使用不同的字节排序方式保存数据。高位优先的方式将最高位的字节放在最低的内存地址,即内存起始地址。低位优先方式将最高位的字节放在最高的内存地址,即内存末尾地址。
内存映射文件:可以创建和修改那些因为太大而无法加载到内存中的文件。
通过在FileChannel上调用tryLock或lock,便可以获得整个文件上的FileLock。
相关文章:
《On Java进阶卷》阅读笔记(五)
第7章 IO系统 I/O流: IO有很多不同的来源和去处,如文件、控制台网络连接等,而且还涉及需求以很多种方式,如顺序读取、随机访问、缓冲、字符、按行读取、按字读取等。 Java8的函数式流相关的类和IO流之间并无关联。 IO流隐藏了…...
《代码随想录》刷题笔记——回溯篇【java实现】
文章目录 组合组合总和 III电话号码的字母组合组合总和组合总和II思路代码实现 分割回文串※思路字符串分割回文串判断效率优化※ 复原 IP 地址优化版本 子集子集 II使用usedArr辅助去重不使用usedArr辅助去重 递增子序列※全排列全排列 II重新安排行程题意代码 N 皇后解数独直…...
数值积分:通过复合梯形法计算
在物理学和工程学中,很多问题都可以通过数值积分来求解,特别是当我们无法得到解析解时。数值积分是通过计算积分区间内离散点的函数值来近似积分的结果。在这篇博客中,我将讨论如何使用 复合梯形法 来进行数值积分,并以一个简单的…...
AcWing——3624. 三值字符串
双指针解法 #include<iostream> #include<unordered_map> using namespace std; int main() {int n; cin >> n;while(n--){unordered_map<char, int> tree;string s; cin >> s;int ans 0x7fffffff; for(int i 0, j 0; j < (int)s.size();…...
【JavaEE进阶】验证码案例
目 🌲实现说明 🎄Hutool介绍 🌳准备工作 🌴约定前后端交互接口 🚩接口定义 🚩实现服务器后端代码 🚩前端代码 🚩整体测试 🌲实现说明 随着安全性的要求越来越⾼…...
Uniapp 短视频去水印解析工具开发实现
最近搞了一个有意思的小工具——短视频去水印解析器!这玩意儿可以把短视频中的水印给抹掉,还能提取视频、封面等资源。整个项目用了 Uniapp 开发,做完后体验了一下,发现还挺顺手。今天就来跟大家聊聊实现思路和代码细节~ 需求分析…...
计算机网络-八股-学习摘要
一:HTTP的基本概念 全称: 超文本传输协议 从三个方面介绍HTTP协议 1,超文本:我们先来理解「文本」,在互联网早期的时候只是简单的字符文字,但现在「文本」的涵义已经可以扩展为图片、视频、压缩包等&am…...
编程速递-庆祝Delphi诞生30周年!
庆祝Delphi 30周年纪念是一个特别的时刻。 回到1995年,也就是30年前,在微软Windows和互联网时代的曙光初现之时,Borland Delphi的创建者们无法想象,当时使用Borland Delphi构建的应用程序至今仍在运行——为全世界数十亿人服务。…...
每天五分钟深度学习框架pytorch:搭建谷歌的Inception网络模块
本文重点 前面我们学习了VGG,从现在开始我们将学习谷歌公司推出的GoogLeNet。当年ImageNet竞赛的第二名是VGG,而第一名就是GoogLeNet,它的模型设计拥有很多的技巧,这个model证明了一件事:用更多的卷积,更深的层次可以得到更好的结构 GoogLeNet的网络结构 如图所示就是Go…...
性能测试流程、主流性能工具
性能测试流程 性能测试流程 测试测试需求分析 性能测试计划和方案 测什么: 测试背景 测试目的 测试范围 谁来测: 进度和分工 交付清单 怎么测: 测试策略 性能测试用例设计 性能测试测试执行 性能分析和调优 性能测试报告 测试报告是…...
DeepSeek4j 已开源,支持思维链,自定义参数,Spring Boot Starter 轻松集成,快速入门!建议收藏
DeepSeek4j Spring Boot Starter 快速入门 简介 DeepSeek4j 是一个专为 Spring Boot 设计的 AI 能力集成启动器,可快速接入 DeepSeek 大模型服务。通过简洁的配置和易用的 API,开发者可轻松实现对话交互功能。 环境要求 JDK 8Spring Boot 2.7Maven/Gr…...
无耳科技 Solon v3.0.8 发布,Java 企业级应用开发框架
Solon 框架! Solon 是新一代,Java 企业级应用开发框架。是杭州无耳科技有限公司的“根级”开源项目(最近“杭州六小龙”很火啊,我们也是杭州的哦)。从零开始构建(No Spring、No Java-EE、No Servlet&#…...
【吾爱出品】针对红警之类老游戏适用WIN10和11的补丁cnc-ddraw7.1汉化版
针对红警之类老游戏适用WIN10和11的补丁cnc-ddraw7.1汉化版 链接:https://pan.xunlei.com/s/VOJ8PZd4avMubnDzHQAeZDxWA1?pwdnjwm# 直接复制到游戏安装目录,保持与游戏主程序同目录下。...
使用 playwright 自定义 js 下载的路径和文件名
遇到一个问题,点击按钮自动下载文件,路径和文件名都不能自定义,可以用 playwright 来解决这个问题 from playwright.sync_api import sync_playwright import os import time class ExcelDownloader: def __init__(self, download_pat…...
Kafka分区管理大师指南:扩容、均衡、迁移与限流全解析
#作者:孙德新 文章目录 分区分配操作(kafka-reassign-partitions.sh)1.1 分区扩容、数据均衡、迁移(kafka-reassign-partitions.sh)1.2、修改topic分区partition的副本数(扩缩容副本)1.3、Partition Reassign场景限流1.4、节点内副本移动到不…...
3.从零开始学会Vue--{{生命周期,工程化,组件化}}
1.生命周期钩子 1.是什么 生命周期 概念:就是一个Vue实例从创建 到 销毁 的整个过程 生命周期包括:① 创建 ② 挂载 ③ 更新 ④ 销毁 四个阶段 1.创建阶段:创建响应式数据 2.挂载阶段:渲染模板 3.更新阶段:修改…...
Python--网络编程
3. 网络编程与Socket 3.1 Socket基础 创建Socket import socket# TCP Socket tcp_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# UDP Socket udp_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM)服务器端函数 函数描述bind((host, port))绑定…...
【java】方法的基本内存原理(栈和堆)
java内存主要分为栈和堆,方法相关的部分主要在栈内存里,每个方法调用时会在栈里创建一个栈帧,存放局部变量和方法执行的信息。执行完后栈帧被销毁,局部变量消失。而对象实例存在堆里,由垃圾回收器管理。 **Java方法内…...
SQLMesh 系列教程4- 详解模型特点及模型类型
SQLMesh 作为一款强大的数据建模工具,以其灵活的模型设计和高效的增量处理能力脱颖而出。本文将详细介绍 SQLMesh 模型的特点和类型,帮助读者快速了解其强大功能。我们将深入探讨不同模型类型(如增量模型、全量模型、SCD Type 2 等࿰…...
SpringBoot(接受参数相关注解)
文章目录 1.基本介绍2.PathVariable 路径参数获取信息 1.代码实例 1.index.html2.ParameterController.java3.测试 2.细节说明 3.RequestHeader 请求头获取信息 1.代码实例 1.index.html2.ParameterController.java3.测试 2.细节说明 4.RequestParameter 请求获取参数信息 1.…...
【OpenClaw全面解析:从零到精通】第41篇:OpenClaw + Home Assistant 智能家居实战:飞书一句话控制全屋设备,打造真正的 AI 管家
上一篇【第40篇】OpenClaw IDE集成深度指南——从VSCode插件到ACP协议让AI Agent驱动编辑器实战 下一篇【第42篇】OpenClaw RAG知识库智能客服实战:用向量检索打造"懂业务"的AI助手(明日更新,敬请期待) 摘要 OpenClaw …...
WeChatMsg:如何永久保存微信聊天记录并深度分析你的社交足迹?
WeChatMsg:如何永久保存微信聊天记录并深度分析你的社交足迹? 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub…...
Mac Mouse Fix完整指南:让普通鼠标在macOS上超越触控板体验
Mac Mouse Fix完整指南:让普通鼠标在macOS上超越触控板体验 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 还在为macOS上第三方鼠标…...
IP5513 集成 MCU 的 TWS 耳机充电仓管理 SoC
1 特性 同步开关放电 300mA 同步升压转换 升压效率最高达 93% 内置电源路径管理,支持边充边放 充电 最大 500mA 线性充电,充电电流可调 自动调节充电电流,匹配适配器输出能力 支持 4.20V、4.30V、4.35V 和 4.4V 电池…...
从Nano-SIM标准之争看硬件设计中的兼容性与话语权博弈
1. 从“大卡”到“纳米”:SIM卡演进史与产业博弈如果你在2012年前后关注过手机行业,一定会对那场关于“SIM卡到底该做多小”的争论记忆犹新。那不是一个简单的技术尺寸问题,而是一场牵涉到苹果、摩托罗拉、RIM(黑莓)和…...
小红书数据采集终极指南:5个简单技巧破解反爬限制
小红书数据采集终极指南:5个简单技巧破解反爬限制 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 在小红书数据采集领域,许多开发者都面临着动态签名…...
OpenClaw 2.6.6 Windows 部署教程|拦截与报错一站式解决
OpenClaw 2.6.6 Windows 一键部署教程|零基础搭建本地 AI 智能助手 OpenClaw(小龙虾)是一款可在本地环境运行的 AI 智能操作工具,能够通过自然语言指令完成电脑操控、文件管理、办公自动化、浏览器操作、数据整理等任务。全程可视…...
基于MCP协议构建智能品牌安全审核系统:架构、模型与实战
1. 项目概述:品牌安全智能监控的“火眼金睛”在社交媒体营销和品牌合作领域,有一个长期困扰品牌方和代理机构的“暗礁”:如何在海量的网红内容发布前,精准识别其中潜藏的品牌安全风险?传统的做法是人工审核,…...
基于MCP协议构建日本本地化AI工具:japan-mcp-servers项目实践
1. 项目概述与核心价值最近在折腾AI智能体开发,特别是想让它们能更“接地气”地处理一些本地化、场景化的任务时,遇到了一个挺普遍的问题:很多现成的工具或模型,对特定区域(比如日本)的数据、服务或API支持…...
高效解决Windows热键冲突:Hotkey Detective实用指南
高效解决Windows热键冲突:Hotkey Detective实用指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾经…...
