《Java 核心技术面试》课程笔记(十二)

news2024/11/30 12:37:07

Java 有几种文件拷贝方式?哪一种最高效?

典型回答

  • Java 有多种比较典型的文件拷贝实现方式,比如:利用java.io 类库,直接为源文件构建一个 FileInputStream 读取,然后再为目标文件构建一个 FileOutputStream,完成写入工作。
  • 或者,利用 java.nio 类库提供的 transferTo 或 transferFrom 方法实现。总体上来说,NIO transferTo/From 的方式可能更快,因为它更能利用现代操作系统底层机制,避免不必要拷贝和上下文切换。

考点分析

  • 从面试的角度来看,确实是一个面试考察的点,针对我上面的典型回答,面试官还可能会从实践角度,或者 IO 底层实现机制等方面进一步提问。
  • 从技术角度展开,下面这些方面值得注意:
    • 不同的 copy 方式,底层机制有什么区别?
    • 为什么零拷贝(zero-copy)可能有性能优势?
    • Buffer 分类与使用。
    • Direct Buffer 对垃圾收集等方面的影响与实践选择。

知识扩展

  • 拷贝实现机制分析
    • 先来理解一下,不同拷贝方法,本质上有什么明显的区别。
    • 首先,你需要理解用户态空间(User Space)和内核态空间(Kernel Space),这是操作系统层面的基本概念。
    • 操作系统内核、硬件驱动等运行在内核态空间,具有相对高的特权;而用户态空间,则是给普通应用和服务使用。
    • 当我们使用输入输出流进行读写时,实际上是进行了多次上下文切换,比如应用读取数据时,先在内核态将数据从磁盘读取到内核缓存,再切换到用户态将数据从内核缓存读取到用户缓存。写入操作也是类似,仅仅是步骤相反。
      在这里插入图片描述
    • 所以,这种方式会带来一定的额外开销,可能会降低 IO 效率。
  • 基于 NIO transferTo 的实现方式,在 Linux 和 Unix 上,则会使用到零拷贝技术。
    • 数据传输并不需要用户态参与,省去了上下文切换的开销和不必要的内存拷贝,进而可能提高应用拷贝性能。
    • transferTo 不仅仅是可以用在文件拷贝中,与其类似的,例如读取磁盘文件,然后进行 Socket 发送,同样可以享受这种机制带来的性能和扩展性提高。
    • transferTo 的传输过程是:
      在这里插入图片描述
  • 简单从实践角度总结一下,如何提高类似拷贝等 IO 操作的性能,有一些宽泛的原则:
    • 在程序中,使用缓存等机制,合理减少 IO 次数(在网络通信中,如 TCP 传输,window 大小也可以看作是类似思路)
    • 使用 transferTo 等机制,减少上下文切换和额外 IO 操作。
    • 尽量减少不必要的转换过程,比如编解码;对象序列化和反序列化,比如操作文本文件或者网络通信,如果不是过程中需要使用文本信息,可以考虑不要将二进制信息转换成字符串,直接传输二进制信息。

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

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

相关文章

chatgpt赋能python:Python模块(Module)是什么?

Python模块(Module)是什么? Python模块(Module)是指一些预先编写好的代码,这些代码可以在程序中被引入和使用。它们可以包含可以复用的函数、常量和类。Python模块是一种封装程序代码的方法。 下载Python…

领取的AWS亚马逊云服务器到期会扣费的问题解决办法。

本篇文章主要讲解,领取的AWS亚马逊服务器到期后会持续扣费问题的解决办法。 作者:任聪聪 日期:2023年6月8日 关于aws服务器一年免费期限到期后扣费的问题,网络上的文章并不是很全,故此我通过个人的经验进行了如下的教程…

chatgpt赋能python:Python怎么print换行?

Python怎么print换行? 如果你是一个Python开发者,你可能遇到过需要在Python中打印输出换行的情况。本文将分享几种方式,让你学会如何在Python中print换行。 1. 使用"\n" 您可以在print语句中使用"\n"来表示换行。这个…

陈丹琦团队新作:单卡A100可训300亿参数模型啦!

夕小瑶科技说 原创 作者 | 智商掉了一地、ZenMoore 近年来,随着大模型的涌现,微调语言模型已经在各种下游任务上展现出了卓越的性能。然而,这些庞大模型的参数量常常达到数十亿甚至上百亿的级别,训练这样规模的模型需要消耗大量…

chatgpt赋能python:Python视图(View)在SEO中的重要性

Python视图(View)在SEO中的重要性 什么是Python视图? Python视图是指,在Web应用程序中,将业务逻辑与显示逻辑分开处理,并以代码的形式定义的可重用组件。它们是与URL相对应的函数或方法。Python视图可以生…

uniapp:uni-app-base 项目基础配置,开箱可用

目前(20230605)uni-app最新版本(3.8.4.20230531) 一、官网文档 uni-app官网 二、创建项目 项目目标:vue3tsvitevscode 创建以 typescript 开发的工程(如命令行创建失败,请直接访问 gitee 下…

《面试1v1》JVM调优

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 《面试1v1》 连载中… 面试官: 小伙子,说听说你JVM调优挺在行? 候选人: 谢谢夸奖,我对JVM调优还在学习中,远未达到在行的程度。不过日常工作…

springboot项目外卖管理 day04-文件的上传下载与菜品的新增与修改

文章目录 1、文件上传下载1.1、文件上传介绍与实现1.2、文件下载介绍与实现 2、新增菜品2.1、需求分析2.2、代码开发-梳理交互过程2.2.1、菜品分类下拉框:在CategoryController添加 2.2.2、新增保存 3、菜品信息分页查询3.1、代码开发-梳理交互过程对象拷贝BeanUtil…

chatgpt赋能python:Python输出方法详解:从基础print()到高级logging模块

Python输出方法详解:从基础print()到高级logging模块 在Python编程中,输出是一个必不可少的步骤。然而,Python提供了多种输出方法,如何选择最适合的方法呢?本文将详细介绍Python输出的不同方法,并给出实际…

只给大模型LeetCode编号,也能解题!大模型表现好是源于对训练数据的记忆吗?请不要迷信大模型

夕小瑶科技说 原创 作者 | Python 自从推出以来,ChatGPT这款智能高效的人机对话平台迅速风靡全球。人们开始广泛尝试使用ChatGPT来解决各种问题,无论是医学检测报告的解释,还是公众号文章的取名,甚至是论文修改润色和rebuttal撰…

微服务治理框架- - -Spring Cloud

前言:最近微服务很是火热,那么什么是微服务?相信小伙伴们对此也是一知半解,那么今天叶秋学长带领大家一起学习微服务治理框架Spring Cloud,快来跟着学长一起学习吧~~ 目录 对SpringCloud了解多少? 什么是…

【动态规划】NK刷题之DP7 连续子数组的最大乘积

【动态规划】NK刷题之DP7 连续子数组的最大乘积 1.题目2.题解3.代码部分法一:动态规划3.1.1 创建变量n,并读入数据3.1.2 创建动态数组,并初始化3.1.3 对动态数组断言3.1.4 读入原整形数组的数据3.1.5 创建变量ret,并赋初值3.1.6 循…

chatgpt赋能python:Python怎么下jieba库

Python怎么下jieba库 Python是目前最流行的动态编程语言之一,广泛应用于Web开发、数据分析、人工智能等领域。对于中文文本处理来说,jieba库是一款非常实用的工具。本文将介绍如何下载jieba库,并探讨其在中文分词、情感分析等方面的应用。 …

week7 表示学习(Representation Learning) Part1--Pretext Text

文章目录 Representation LearningInferring structure(推断结构) Transformation predictionRotation predictionRelative transformation prediction ReconstructionDenoising AutoencodersContext encodersColorizationSplit-brain encoders Instance…

Keras-3-实例3-回归问题

1. 回归问题 1.1 波士顿房价数据集加载: 预测20世界70年代中期波士顿郊区房屋价格的中位数。 已知当时郊区有一些数据点,如犯罪率、房产税率等。 与IMDB和路透社数据集相比,波士顿房价数据集样本量比较少,只有506个样本;同时&a…

数据结构——绪论/线性表

文章目录 **一 基本概念****二 算法和算法评价****三 线性表的定义和基本操作****四 线性表的顺序表示****1 定义****2 基本操作** **五 线性表的链式表示****1 单链表的定义****2 单链表的基本操作实现****3 双链表****4 循环链表****5 静态链表** 一 基本概念 数据类型&…

使用pycharm入门python的一些注意点

今儿在帮别人跑一段python代码,实际上我对python并不熟悉,只能边摸索边尝试。选择了pycharm这个工具。 一.怎么安装python使用的库文件 能用来安装python的库文件的,有很多种办法,这里只介绍pip和pip3。因为pip和pip3的优势是能…

SpringCloud第一篇:服务的注册与发现Eureka

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。 二、创建服务注册中心 …

oracle细节、经验锦集

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131054454 出自【进步*于辰的博客】> 由于是随兴记录,因此阐述的比较多而乱&…

详解Eureka服务注册和调用

目录 1.概述 2.环境 2.1.项目结构 2.2.项目架构 2.3.依赖 3.注册中心 3.1.配置使用 3.2.管理页 3.3.集群 4.服务注册 5.服务调用 5.2.Ribbon 5.3.Feign 5.4.OpenFeign 1.概述 我们把从外部进入到微服务集群里的流量称为“南北流量”、微服务集群节点间流转的流量…