Java手写IO流和案例拓展
Java手写IO流和案例拓展
1. 手写IO流的必要性
在Java编程中,IO流是非常重要的概念。尽管Java已经提供了许多现成的IO类和方法,但是了解IO流的底层实现原理,能够手写IO流是非常有必要的。手写IO流可以帮助我们更深入地理解IO的工作原理,提高对IO流的使用和调试能力。
2. 市场调查
在市场上,对于掌握IO流的手写能力的Java开发者需求量较大。许多企业在招聘Java开发人员时,都会将IO流的手写能力作为考察的重点之一。掌握手写IO流的能力,不仅能提高个人竞争力,还能在实际开发中更好地解决IO相关的问题。
3. 实现思路原理
以下是使用Mermanid代码表示的思维导图,解释了手写IO流的实现思路原理:
上述思维导图中,首先需要创建输入流和输出流,然后通过输入流读取数据,通过输出流写入数据,最后关闭流。
4. 实现的详细介绍和详细步骤
下面是手写IO流的详细步骤:
步骤1:创建输入流
首先,我们需要创建一个输入流,用于读取数据。可以使用FileInputStream
类来创建输入流对象。以下是创建输入流的代码:
FileInputStream inputStream = new FileInputStream("input.txt");
步骤2:创建输出流
接下来,我们需要创建一个输出流,用于写入数据。可以使用FileOutputStream
类来创建输出流对象。以下是创建输出流的代码:
FileOutputStream outputStream = new FileOutputStream("output.txt");
步骤3:读取数据
使用输入流对象,我们可以读取数据。可以使用read()
方法来读取一个字节的数据。以下是读取数据的代码:
int data = inputStream.read();
while (data != -1) {// 处理读取到的数据// ...data = inputStream.read();
}
步骤4:写入数据
使用输出流对象,我们可以写入数据。可以使用write()
方法来写入一个字节的数据。以下是写入数据的代码:
outputStream.write(data);
步骤5:关闭流
在完成读取和写入操作后,我们需要关闭输入流和输出流,以释放系统资源。可以使用close()
方法来关闭流。以下是关闭流的代码:
inputStream.close();
outputStream.close();
5. 手写实现总结及必要性
通过手写IO流的实现过程,我们深入了解了IO流的底层工作原理。手写IO流能够帮助我们更好地理解和掌握IO的使用方法,提高对IO流的调试能力和问题解决能力。同时,掌握手写IO流的能力也是Java开发者的一项重要技能,能够提高个人竞争力。
6. 完整代码
以下是手写IO流的完整代码示例:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class MyIO {public static void main(String[] args) throws IOException {FileInputStream inputStream = new FileInputStream("input.txt");FileOutputStream outputStream = new FileOutputStream("output.txt");int data = inputStream.read();while (data != -1) {// 处理读取到的数据// ...outputStream.write(data);data = inputStream.read();}inputStream.close();outputStream.close();}
}
7. 应用前景调研
手写IO流的应用前景非常广泛。在实际开发中,我们经常需要处理文件、网络传输等IO操作。掌握手写IO流的能力,可以帮助我们更好地理解和解决IO相关的问题。同时,手写IO流的能力也是许多企业在招聘Java开发人员时的重要考察点。
8. 拓展应用案例
以下是两个拓展应用案例,演示了手写IO流在实际开发中的应用:
案例1:复制文件
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class FileCopy {public static void main(String[] args) throws IOException {FileInputStream inputStream = new FileInputStream("source.txt");FileOutputStream outputStream = new FileOutputStream("target.txt");int data = inputStream.read();while (data != -1) {outputStream.write(data);data = inputStream.read();}inputStream.close();outputStream.close();}
}
上述代码实现了将一个文件的内容复制到另一个文件的功能。
案例2:统计文件行数
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class LineCounter {public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new FileReader("file.txt"));int count = 0;String line = reader.readLine();while (line != null) {count++;line = reader.readLine();}reader.close();System.out.println("Total lines: " + count);}
}
上述代码实现了统计一个文件的行数的功能。
通过以上案例,我们可以看到手写IO流的应用非常广泛,可以用于文件复制、文件读取、数据统计等各种场景。
以上是关于Java手写IO流和案例拓展的博客内容,希望对你有所帮助!
相关文章:
Java手写IO流和案例拓展
Java手写IO流和案例拓展 1. 手写IO流的必要性 在Java编程中,IO流是非常重要的概念。尽管Java已经提供了许多现成的IO类和方法,但是了解IO流的底层实现原理,能够手写IO流是非常有必要的。手写IO流可以帮助我们更深入地理解IO的工作原理&…...
Linux入门教程||Linux 文件与目录管理
我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。 在开始本教程前我们需要先知道什么是绝对路径与相对路径。 绝对路径: 路径的写法,由根目录 /…...
MyBatis获取参数值的两种方式#{}和${} 以及 获取参数值的各种情况
一、参数值的两种方式#{}和${} 在 MyBatis 中,可以使用两种方式来获取参数值:#{} 和 ${}。 1. #{}:这是 MyBatis 推荐使用的方式。在 SQL 语句中使用 #{},MyBatis 会自动将参数值进行预编译处理,防止 SQL 注入攻击&a…...
(手撕)数据结构--->堆
文章内容 目录 一:堆的相关概念与结构 二:堆的代码实现与重要接口代码讲解 让我们一起来学习:一种特殊的数据结构吧!!!! 一:堆的相关概念与结构 在前面我们已经简单的学习过了二叉树的链式存储结…...
[运维|数据库] MySQL 中的COLLATE在 PostgreSQL如何表示
在 PostgreSQL 中,字符集(collation)和排序规则(collation order)的概念与 MySQL 类似,但语法和用法略有不同。在 PostgreSQL 中,字符集和排序规则通常是数据库、表或列级别的设置,而…...
【Linux】tar 与 zip 命令
tar 命令 tar 本质上只是一个打包命令,可以将多个文件或者文件夹打包到一个 tar 文件中,结合其他的压缩程序再将打包后的档案文件压缩。 所以看到 .tar.gz, .tar.bz2, .tar.xz 等等文件其实是 tar 文件之后进行 Gzip, Bzip2, XZ 压缩之后的文件。 tar…...
VS2015+opencv 3.4.6开发环境
VS2015+opencv 3.4.6开发环境 一、安装包下载二、安装过程三、VS环境配置四、测试一、安装包下载 这里提供两种下载方法: 1. opencv官网 2. csdn资源下载 二、安装过程 2.1 下载opencv-3.4.6 安装包 2.2 双击开始安装,选择要安装目录,点击Extract。 2.3 等待解…...
[运维|数据库] 将mysql的null.unix_timestamp(now()) * 1000转为PostgreSQL的语法
在 PostgreSQL 中,您可以使用以下方式将 MySQL 中的 UNIX_TIMESTAMP 和 NOW() 函数的组合转换为等效的语法: EXTRACT(EPOCH FROM NOW()) * 1000在这个 PostgreSQL 表达式中: EXTRACT(EPOCH FROM NOW()) 获取当前时间戳的秒数。 2. * 1000 将…...
springboot使用filter增加全局traceId,方便日志查找
一:引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 二:编写过滤器: package com.example.demo.filter;import or…...
面经学习三
目录 Java 与 C 的区别 面向对象和面向过程的区别 面向对象特性 Java的基本数据类型 深拷贝和浅拷贝 Java创建对象的几种方式 final, finally, finalize 的区别 Java 与 C 的区别 Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,…...
Open3D 点云配准——可视化匹配点对之间的连线
点云配准 一、算法原理1、概述2、主要函数二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、概述 可视化源点云和目标点云中匹配点对之间的连线,这对于点云配准,尤…...
io多路复用之poll的详细执行过程
1.结构体struct pollfd的定义 struct pollfd { int fd; /* 文件描述符 */ short events; /* 想要监视的事件(input/output/priority) */ short revents; /* 实际发生的事件(返回的事件) */ }; 2.定义po…...
网络安全深入学习第四课——热门框架漏洞(RCE— Log4j2远程代码执行)
文章目录 一、log4j2二、背景三、影响版本四、漏洞原理五、LDAP和JNDI是什么六、漏洞手工复现1、利用DNSlog来测试漏洞是否存在2、加载恶意文件Exploit.java,将其编译成class文件3、开启web服务4、在恶意文件Exploit.class所在的目录开启LDAP服务5、监听反弹shell的…...
大数据Flink(八十一):SQL 时区问题
文章目录 SQL 时区问题 一、SQL 时区解决的问题...
Input子系统 - Kernel驱动程序 - Android
Input子系统 - Kernel驱动程序 - Android 1、Input子系统相关定义1.1 代码位置1.2 input_dev结构体:表示输入设备1.3 input_handler结构体:struct input_handler - implements one of interfaces for input devices1.4 input_handle结构体:将…...
MySQL里的查看操作
文章目录 查看当前mysql有谁连接查看数据库或者表 查看当前mysql有谁连接 show processlist;查看数据库或者表 列出所有数据库: show databases;查看正在使用的数据库(必须大写): SELECT DATABASE();列出数据库中的表…...
Vim的基础操作
前言 本文将向您介绍关于vim的基础操作 基础操作 在讲配置之前,我们可以新建一个文件 .vimrc,并用vim打开在里面输入set nu 先给界面加上行数,然后shift ;输入wq退出 默认打开:命令模式 在命令模式中:…...
十天学完基础数据结构-第一天(绪论)
1. 数据结构的研究内容 数据结构的研究主要包括以下核心内容和目标: 存储和组织数据:数据结构研究如何高效地存储和组织数据,以便于访问和操作。这包括了在内存或磁盘上的数据存储方式,如何将数据元素组织成有序或无序的集合&…...
神经网络 03(参数初始化)
一、参数初始化 对于某一个神经元来说,需要初始化的参数有两类:一类是权重W,还有一类是偏置b,偏置b初始化为0即可。而权重W的初始化比较重要,我们着重来介绍常见的初始化方式。 (1)随机初始化 …...
div设置圆角#前端
要在 div元素上设置圆角,您可以使用 CSS 的 border-radius 属性。 这个属性允许您指定元素的边角为圆角,可以将其应用于一个或多个边角。以下是一些示例代码:1.设置所有四个边角为圆角: div {border-radius: 10px; /* 设置所有四…...
Windows开机密码破解
Windows11以及Windows10(21H2)以上版本 先开机,不进行任何操作,静静的等待登录界面 按住Shift重启 进入“选择一个选项”界面,点击疑难解答 点击高级选项 点击命令提示符 输入两行命令 copy C:\windows\system32\uti1man.exe C: \Window…...
Mobirise for Mac:轻松创建手机网站的手机网站建设软件
如果你是一位设计师或者开发人员,正在寻找一款强大的手机网站建设软件,那么Mobirise for Mac绝对值得你尝试。这个独特的应用程序将帮助你轻松创建优雅而实用的手机网站,而无需编写复杂的代码。 Mobirise for Mac的主要特点包括:…...
[npm] npx 介绍与使用说明
[npm] npx 介绍与使用说明 npm 的由来npx 是什么?npx 特点npx 的特点项目安装包的使用全局安装包的避免指定工具包版本--no-install 参数和--ignore-existing 参数使用不同版本的 node-p 参数-c 参数实战应用 执行 GitHub 源码 npm 的由来 说到 npm 就离不开社区文…...
QT : 仿照QQ 完成弹出登录窗口,并实例化组件
1. 运行效果图 2. Headers #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow(); }; #endif // MAINWINDOW_H 3. mainWindow.cpp :…...
typescrip接口 interface详解,以及ts实现多态
ts 接口 当一个对象类型被多次使用时,一般会使用接口(interface)来描述对象的类型,达到复用的目的 示例如下 当一个对象类型被多次使用时,可以看到,很明显代码有大量的冗余 let personTom: { name: string, age?: number, sayHi(name: string): void } {name: Tom,sayHi(n…...
Vivado IP中Generate Output Products的设置说明
文章目录 Vivado IP中Generate Output Products的设置说明Synthesis OptionsRun Settings 官方文档中的介绍Generate Output ProductsSynthesis Options for IP 参考文献 Vivado IP中Generate Output Products的设置说明 在创建IP核时,将IP核的信息配置完成之后会弹…...
9.3.5网络原理(应用层HTTP/HTTPS)
一.HTTP: 1. HTTP是超文本传输协议,除了传输字符串,还可以传输图片,字体,视频,音频. 2. 3.HTTP协议报文格式:a.首行,b.请求头(header),c.空行(相当于一个分隔符,分隔了header和body),d.正文(body). 4. 5.URL:唯一资源描述符(长度不限制). a. b.注意:查询字符串(query stri…...
vue基础知识十一:Vue组件之间的通信方式都有哪些?
一、组件间通信的概念 开始之前,我们把组件间通信这个词进行拆分 组件通信 都知道组件是vue最强大的功能之一,vue中每一个.vue我们都可以视之为一个组件通信指的是发送者通过某种媒体以某种格式来传递信息到收信者以达到某个目的。广义上,…...
高阶数据结构(2)-----红黑树(未完成)
一)红黑树的基本概念和基本性质: 1)红黑树就是一种高度平衡的二叉搜索树,但是在每一个节点上面都增加了一个存储位来表示结点的颜色,可以是红色或者是黑色,通过对任何一条从根节点到叶子节点上面的路径各个节点着色方式的限制,红黑…...
[mockjs]Mock使用过程中的坑
[mockjs]Mock使用过程中的坑 现象描述原因分析解决方案修改源码处理无法识别的文件流 现象描述 mockjs在使用的过程中出现了下载文件无法正常打开的问题,但是在线上环境是正常的 console.log打印返回的response,发现是本地无法正常解析response.data 在代码中&am…...
网站制作论文致谢/推广代理登录页面
实体造型 计算机造型:如何在计算机中建立模型表示不同图形对象。 图形对象的描述包括图形信息和非图形信息。 (1)图形信息又分为几何信息和拓扑信息。几何信息包括形体位置和大小,拓扑信息包括形体点、边、面的数量及相互之间的连…...
wordpress 当前位置/快速网站搭建
如何制作更改计算机名的脚本(有图)首先新建一个txt文档,输入以下代码echo offset /p newcomputername请输入新的计算机名:wmic computersystem where "name%computername%" call rename %newcomputername%以上代码输入后将文档另存为rename.ba…...
做游戏网站的分析/给公司做网站的公司
MySQL数据库基本操作(增删改查)进入MySQL:(前提是安装了MySQL或者集成了MySQL的软件包并且开启了MySQL服务)– Mysql –u 用户名 –p //回车– 输入密码 //正确则直接进入mysql注意:所有的sql语句末尾都要分号,sql语句的大…...
wordpress动图打开很慢/搜索引擎优化seo什么意思
多属性决策的权重确定方法及matlab 程序本文介绍11种多属性决策权重确定方法及matlab 程序。目录1.列和求逆归一化方法(NHM ) (1)2.行和归一化方法(NRA ) (1)3.和积法(ANC) (2)4.方根法(NGM ) (2)5. 特征向量法(EM ) (2)6.上三角梯度特征向量法HGEM (2)7.下三角梯度特征向量法L…...
贵州建设监理协会网站/公司网站建设步骤
MySql noinstall-5.1.xx-win32 配置(原创)1、解压mysql-noinstall-5.1.xx-win32.zip 到你喜欢的目录,例如:d:\php\mysql2、在根目录d:\php\mysql中有五个配置信息文件:my-small.ini (内存 < 64M)my-medium.ini (内存 128M )my-large.ini (内存 512M)m…...
手机网站建设收费/推广官网
实例分析:拓扑两端分别对应的是各自的私网地址,R1/R2与中央路由器之间的地址分配为可路由地址,模拟通过internet建立LAN-to-LAN 。加密点:202.100.2.1 202.100.1.1通讯点:即为R1/R2后方的子网,此处用1.1.1.…...