Java实现文件写入——IO流(输入输出流详解)

输入输出的重要性:

输入和输出功能是Java对程序处理数据能力的提高,Java以流的形式处理数据。流是一组有序的数据序列,根据操作的类型,分为输入流和输出流。

程序从输入流读取数据,向输出流写入数据。Java是面向对象的程序语言,每一个数据流都是一个对象,它们提供了各种支持“读入”与“写入”操作的流类。

Java的输入输出功能来自java.io 包中的InputStream类、OutputStream类、Reader类和Writer类以及继承它们的各种子类。


(一)解析文件处理的奥秘

1、学习使用文件类 : File类

File类用于封装系统的文件和目录的相关信息。在该类中定义了一些与平台无关的方法来操作文件。例如文件的大小、修改时间、文件路径等。

创建 File 对象可以通过下面3种方式:

方法1:方法2:方法3:
new File(String pathName)File file = new File(“E://1.txt”)new File(String parent , String child)
parent :父抽象路径名;child:子路径名字符串

2、如何获取文件信息

File 类是对文件和文件夹的抽象,包含了对文件和文件夹的多种属性和操作方法。File类的常用方法如下表:

返回方法说明
StringgetName获取文件名称
StringgetParent获取文件的父路径字符串
StringgetPath获取文件的相对路径字符串
StringgetAbsolutePath获取文件的绝对路径字符串
booleanexists判断文件或者文件夹是否存在
booleanisFile判断是不是文件类型
booleanisDirectory判断是不是文件夹类型
booleandelete删除文件或文件夹,如果删除成功返回结果为true
booleanmkdir创建文件夹,创建成功返回true
booleansetReadOnly设置文件或文件夹的只读属性
longlength获取文件的长度
longlastModified获取文件的最后修改时间
String[ ]list获取文件夹中的文件和子文件夹的名称,并存放到字符串数组中

下面通过实例介绍File类获取文件信息

package com.zch.io;import java.io.File;
import java.util.Date;/*** 在src根目录下创建FileInfo类,在该类的主方法中创建文件对象,通过File类的相关方法,获取文件的相关信息* */
public class FileInfo {public static void main(String[] args) {String filePath = "src/com/zch/io/FileInfo.java";// 根据指定路径创建文件对象File file = new File(filePath);System.out.println("文件名称:" + file.getName());System.out.println("文件是否存在:" + file.exists());System.out.println("文件的相对路径:" + file.getPath());System.out.println("文件的绝对路径:" + file.getAbsolutePath());System.out.println("是否为可执行文件:" + file.canExecute());System.out.println("文件可以读取:" + file.canRead());System.out.println("文件可以写入:" + file.canWrite());System.out.println("文件上级路径:" + file.getParent());System.out.println("文件大小:" + file.length() + "B");System.out.println("文件最后修改时间:" + new Date(file.lastModified()));System.out.println("是否文件类型:" + file.isFile());System.out.println("是否为文件夹:" + file.isDirectory());}}

运行结果如下:

文件名称:FileInfo.java
文件是否存在:true
文件的相对路径:src\com\zch\io\FileInfo.java
文件的绝对路径:D:\Java\IO\src\com\zch\io\FileInfo.java
是否为可执行文件:true
文件可以读取:true
文件可以写入:true
文件上级路径:src\com\zch\io
文件大小:1195B
文件最后修改时间:Sat 03 21:30:10 CST 2022
是否文件类型:true
是否为文件夹:false

在使用delete()方法删除File对象时,如果删除的对象是目录,该目录中的内容必须为空。


(二)使用字节输入输出流

字节流用于处理二进制数据的读取和写入,它以字节为单位,InputStream类和OutputStream类是字节流的抽象类,它们定义了数据流读取和写入的基本方法。各个子类会依其特点实现或覆盖这些方法。


1、字节数入流抽象类InputStream

InputStream 类是字节输入流的抽象类,定义了操作输入流的各种方法,这些方法如表:

返回方法说明
intavailable()返回当前输入流的数据读取方法可以读取的有效字节数量
Abstract intread()从当前数据流中读取一个字节。若已达到流结尾,则返回-1
intread(byte[ ] bytes)从当前输入流读取一定的byte数据,并存取在数组中,然后返回读取的byte数据的数量,若已到达流结尾,则返回-1。
voidreset()将当前的输入流重新定位到最后一次调用mark()方法时的位置
voidmark(int readlimit)在当前输入流中做标记位置,当调用reset()方法时将返回到该位置,从标记位置开始,到再读入readlimit个字符为止,这个标记都维持有效。
BooleanmarkSupported()测试当前输入流是否支持mark()和reset()方法,只要其中一个不支持,则返回false
longskip(long n)跳过和丢弃当前输入的n个字节数据
voidclose()关闭当前输入流,并释放任何与之相关联的系统资源

InputStream 类是抽象类,不能通过new关键字来创建该实例对象,需要其子类创建该实例对象。下面通过实例如何使用InputStream从控制台获取用户输入的数据信息。

package com.zch.io;import java.io.IOException;
import java.io.InputStream;/*** 创建InputStream实例inp,并将其赋值为System类的in属性,定义为控制台输入流,从inp输入流中获取字节信息,* 用这些字节信息创建字符串,并将其在控制台上输出。*/
public class InputMessage {public static void main(String[] args) {InputStream inp = System.in;byte[] bytes = new byte[1024];try {while(inp.read() != -1){//根据用户输入的信息创建字符串String str = new String(bytes).trim();}inp.close();		//关闭流} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

2、字节输出流抽象类OutputStream类

OutputStream定义了输出流的各种方法,如下表:


和InputStream类一样,OutputStream 类是抽象类,不能通过new关键字来创建该实例对象,需要其子类创建该实例对象。

package com.zch.io;import java.io.IOException;
import java.io.OutputStream;/*** 创建OutputStream实例out,并将其赋值为System.out标准输出流。通过write()方法向流写入数据。*/
public class OutputData {public static void main(String[] args) {OutputStream output = System.out;			//实例化OutputStream对象byte[] bytes = "使用OutputStream输出流在控制台输出字符串\n".getBytes();		//创建bytes数组try {output.write(bytes);bytes = "输出内容:\n".getBytes();output.write(bytes);        //向流中写入数据bytes = "Java数据交互管道——IO流 \n".getBytes();output.write(bytes);output.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

输出结果如下:

使用OutputStream输出流在控制台输出字符串
输出内容:Java数据交互管道——IO流 

3、文件字节输入流类 : FileInputStream类

文件字节输入流可以从指定路径的文件中读取字节数据。文件字节输入流类继承InputStream类,并实现了读取输入流的各种方法。

​ 创建文件字节输入流创建的构造方法语法如下:

  • 语法1:以File对象为参数创建FileInputStream实例
new FileInputStreamFile file)
  • 语法2:以文件对象的绝对路径为参数创建FIleInputStream实例
new FileInputStreamString filepath)

4、文件字节输出流类:FileOutputStream

文件字节输出流关联指定文件路径的文件,数据通过文件字节输出流以字节为单位输出并保存到文件中。文件字节输出流继承自OutputStream类,并实现OutputStream类的各种方法。

文件字节输出流的构造方法语法如下:

  • 语法1:以File对象为参数创建FileOutputStream实例
new FileOutputStreamFile file)
  • 语法2:以文件对象的绝对路径为参数创建FIleOutputStream实例
new FileOutputStreamString filepath)

下面通过实例介绍文件的写入和读取:

package com.zch.io;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;/*** 创建OutputStream实例out,并将其赋值为System.out标准输出流,通过write方法向流中写入数据* */
public class FileCreate {public static void main(String[] args) {File file = new File("D:/", "word.txt");  //创建文件对象try {if (!file.exists()) {				//如果文件不存在则新建文件file.createNewFile();			}FileOutputStream output = new FileOutputStream(file);byte[] bytes = "Java数据交流管道——IO流".getBytes();output.write(bytes);				//将数组的信息写入文件中output.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {FileInputStream input = new FileInputStream(file);byte[] bytes2 = new byte[1024];int len = input.read(bytes2);System.out.println("文件中的信息是:" + new String(bytes2, 0, len));input.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

(三) 使用字符输入输出流

字符输入输出流 与 字节输入输出流有相同的功能,但传送数据的方式不一样,字节流以字节为单位传送数据,可以使任何类型的数据,例如文本、音频、视频、图片等。字符流以字符为单位传送数据,只能传送文本类型的数据。使用字符输入输出流的好处是,当读取中文时不会出现乱码问题,而使用字节输入输出流时,却不能保证这一点。

1、字符输入流抽象类:Reader类

该类定义了操作字符输入流的方法,如下表:

返回方法说明
booleanready()判断此数据流是否准备好
intread()读入一个字符,若已读到流结尾,则返回值为-1
intread(char[ ])读取一些字符到char[ ]数组内,并返回所读入的字符的数量,若已到达流结尾,则返回-1
Abscract intread(char[ ] chars,int off,int len)读取一些字符到char[ ]数组下标从off开始到off+len的位置,并返回所读入的字符的数量,若已到达流结尾,则返回-1;
voidreset()将当前输入流重新定位到最后一次mark()方法时的位置
voidmark(int readLimit)将当前输入流中做标记,当调用reset方法时将返回到该位置,从标记位置开始,到再读入readLimit个字符为止,这个标记都维持有效
booleanmarkSupported测试当前输入流是否支持mark()方法和reset()方法。只要有一个方法不支持,则返回-1
longskip(long n)跳过参数n指定的字符数量,并返回所跳过字符的数量
Abstract voidclose()关闭字符输入流,并释放与之关联的所有资源

2、字符输出流类Writer类

​ Writer 类主要是用于解决字符输入流的类,其地位与Reader类在输入流的地位和作用是相同的,也是所有字符输出流的流类。

Writer类的主要方法如下:

返回方法说明
voidwrite(char[ ] cbuf)将字符数组的数据写入字符输出流
Abstract voidwrite(char[ ] cbuf int off ,int len)将字符数组从下标off 开始向输入流写入长度为len的数据
voidwrite(int c )向字符输入流中写入一个字符数据
voidwrite(String str )向输入流中写入一个字符串数据
voidwrite(String str , int off ,int len)向输入流中写入一个字符串从off 开始长度为len的数据
Abstract voidflush()刷新当前输出流,并强制写入所有缓冲区的字节数据
voidclose()向输出流中写入缓冲区的数据,然后关闭当前输出流,释放所有与当前输出流相关联的系统资源

3、文件字符输入流FileReader

​ 文件字符输入流与文件字节输入流的功能相似,但是传送数据的方式不一样,字节流以字节为单位传送数据,可以使文本、视频、音频、图片等。字符流以字符为单位传送数据,只能传送文本类型的数据。

创建字符输入流常用的构造方法:

  • 语法1:
new FileReaderFile file);
  • 语法2:
new FileReader(String path);

下面通过实例介绍FileReader类读取指定磁盘文件的内容。

package com.zch.io;import java.io.File;
import java.io.FileReader;public class FileInAndOut {public static void main(String[] args) {//定义指定磁盘的文件的File对象File file = new File("D://word.txt");if(! file.exists()){System.out.println("对不起,不包含指定路径的文件");}else{//根据指定路径的File对象创建FileReader对象try {FileReader fr = new FileReader(file);char[] data = new char[23];			//定义char数组int length = 0;while((length = fr.read(data))>0){			//循环读取文件中的数据String str = new String(data,0,length);			//根据读取文件的内容创建String 对象System.out.println(str);				//输出读取内容}fr.close();								//关闭流} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
}

运行结果如下图:

这里写图片描述
这里写图片描述


4、文件字符输出流FileWriter

​ 文件字符输出流继承自Writer类,提供了向文件输出的各种方法,数据通过文件字符输出流以字符为单位输出并保存到文件中。

package com.zch.io;
/*** 通过给定的String类型参数的指定文件名称与路径,创建FileWriter类。*/
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class FileWriterDemo {public static void main(String[] args) {File file = new File("D://word2.txt");		//创建指定文件try {if(! file.exists()){file.createNewFile();				//如果指定文件不存在,新建文件}FileReader fr = new FileReader("D://word.txt");FileWriter fw = new FileWriter(file);				//创建FileWriter对象int length = 0;while((length = fr.read()) != -1){			//如果没有读到文件末尾fw.write(length);			//向文件写入数据}fr.close();							//关闭流fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

运行后创建了Word2.txt 文件,并向其中写入数据
这里写图片描述


(四)IO流实战:

1、Java IO流实现复制文件夹

​ 通过IO不仅可以复制文件,还可以复制文件夹,但是文件夹内,可能包含其他文件夹,因此需要对他们进行分别复制。

package com.zch.io;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;public class CopyFile {public static void main(String[] args) {File sourceFile = null;File desFile = null;String sourceFolder = "D://简历2";String copyFolder = "D://copy";sourceFile = new File(sourceFolder);if (!sourceFile.isDirectory() || !sourceFile.exists()) {System.out.println("源文件夹不存在!");} else {desFile = new File(copyFolder);desFile.mkdir();copy(sourceFile.listFiles(), desFile);System.out.println("文件夹复制成功!");}}
/*** 创建copy方法,该方法接收文件数组和目标文件夹两个参数,如果目标文件夹不存在,则调用mkdir()方法创建文件夹,然后再循环中将文件数组* 中的每个文件对象写到目标文件夹内。* @param fl* @param file*/public static void copy(File[] fl, File file) {if (!file.exists()) { // 如果文件夹不存在file.mkdir(); // 建立新的文件夹}for (int i = 0; i < fl.length; i++) {if (fl[i].isFile()) { // 如果是文件类型,则复制文件try {FileInputStream fis = new FileInputStream(fl[i]);FileOutputStream out = new FileOutputStream(new File(file.getPath() + File.separator + fl[i].getName()));int count = fis.available();byte[] data = new byte[count];if ((fis.read(data)) != -1) {out.write(data);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (fl[i].isDirectory()) { // 如果是文件夹类型File des = new File(file.getPath() + File.separator+ fl[i].getName());des.mkdir(); // 在目标文件夹中创建相同的文件夹copy(fl[i].listFiles(), des); // 递归调用方法本身}}}
}

运行本实例,会将D盘中的简历文件中的内容复制到D盘的copy文件夹中,而且包含文件夹的子文件夹


2、Java IO流实现分行向文件中写入数据

FileWriter类可以向文件写入字符数据,如果将FileWriter类封装到BufferWriter类的缓冲字符流中,能够实现缓冲字符输出流,并且可以通过读输出流的newLine()方法,来实现数据的分行写入。

package com.zch.io;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;/*** 创建BranchWriter类,在主方法中定义文件对象,将该对象作为参数创建BufferedWriter类实例,* 调用该实例的writer方法将数据写入文件中,然后 调用newLine()方法写入换行符,实现分行向文件写入数据。* */
public class BranchWriter {public static void main(String[] args) {String filePath = "D://BranchWriter.txt";File file = new File(filePath);try {if (!file.exists()) {file.createNewFile();}FileWriter fw = new FileWriter(file); // 创建文件输出流BufferedWriter bw = new BufferedWriter(fw); // 使用缓冲区数据流封装输出流for (int i = 0; i < 100; i++) {				//循环写入100行数据bw.write("Java交互管道——IO流".toCharArray());// 写入数据到输出流bw.newLine(); // 写入换行符bw.flush(); // 刷新缓冲区}System.out.println("成功写入数据!");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

3、删除指定文件

​ File类的delete()方法可以实现删除指定的文件,首先使用目标文件路径创建File类的实例对象,然后再调用File类的delete()方法。

package com.zch.io;import java.io.File;public class FileDelete {public static void main(String[] args) {String filePath = "D://word.txt";File file = new File(filePath);delFile(file);}public static void delFile(File file) {if (!file.exists()) {System.out.println("文件不存在!");return;}boolean rs = file.delete();if (rs) {System.out.println("文件删除成功!");} else {System.out.println("文件删除失败!");}}
}

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

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

相关文章

base64解密后乱码_血泪教训!记一个JavaMail 附件乱码的问题

说到乱码&#xff0c;很多人都遇到过&#xff0c;“哎呀&#xff0c;你这个编码是不是UTF-8&#xff01;”&#xff0c;“你这个会不会操作系统不一致导致的&#xff1f;”&#xff0c;“肯定是两边编码不一致”。不过我们今天说的问题&#xff0c;还真不是这个问题导致的。问题…

最新电脑版二级计算机视频怎么打开,电脑版钉钉如何打开视频会议中录制的视频...

电脑版钉钉如何打开视频会议中录制的视频腾讯视频/爱奇艺/优酷/外卖 充值4折起电脑版钉钉软件被很多人使用&#xff0c;用来学习或者工作&#xff0c;想要聚集一些人讨论问题&#xff0c;因此会开视频会议&#xff0c;那么为了能够后期看视频会议&#xff0c;因此会选择录制视频…

POI 单元格类型CellType

1. 单元格类型 单元格的内容决定了单元格的类型&#xff0c;POI中定义的7种单元格类型&#xff1a; 日期数据对应的单元格类型是CellType.NUMERIC&#xff0c;默认以浮点型数显示&#xff0c;显示为日期格式需要设置单元格样式DataFormat字符型单元格内容也可以为富文本Ric…

extjs 渲染之前的方法_Unity通用渲染管线(URP)系列(十一)——后处理(Bloom)...

200篇教程总入口&#xff0c;欢迎收藏&#xff1a;放牛的星星&#xff1a;[教程汇总持续更新]Unity从入门到入坟——收藏这一篇就够了​zhuanlan.zhihu.com本文重点内容&#xff1a;1、创建简单的post-FX栈2、修改渲染后的图像3、需要的时候完成后处理的呈现4、制作Bloom的效果…

服务器需要指定dns吗,Windows Server2012 安装配置DNS服务器方法详解

在云服务器 Windows Server2012 上安装配置DNS服务器方法&#xff0c;安装与配置非常简单&#xff0c;在这里写个完整教程方便大家查询一、安装DNS服务器1.打开服务器管理器&#xff0c;点击添加角色和功能2.一直下一步&#xff0c;选择基于角色或基于功能的安装3.选择目标服务…

SVN提交时出现locked错误解决办法

问题&#xff1a;在SVN中执行 commit 操作时&#xff0c;在更新过程中&#xff0c;中断过&#xff0c;或者因为其他原因导致SVN 出现 locked 异常。 解决方法&#xff1a; 回到SVN文件夹的根目录。如图操作&#xff1a; 点击ok就好了。

windows7系统做文件服务器拒绝,Win7提示qq服务器拒绝了您发送离线文件

腾讯QQ功能强大&#xff0c;语音、视频、传输文件等&#xff0c;很多人都喜欢通过qq给朋友或同事发送文件&#xff0c;即使人不在也可以接收离线文件&#xff0c;随时都可以接收。但是有win7用户发送离线文件时提示“服务器拒绝了您发送离线文件”&#xff0c;该如何解决此问题…

.net bitmap rgb数据_Python商务与经济统计学-数据描述

案例2-1、3-1 Pelican 商店本案例之中主要涉及到Pandas和pyecharts的一些功能&#xff0c;比如利用pandas进行数据筛选&#xff0c;百分比频数统计&#xff0c;将数据进行分组&#xff0c;分组统计&#xff0c;相关性分析等。另外还涉及到了pyecharts的饼图&#xff0c;直方图&…

qq服务器只保留7天文件吗,qq离线文件服务器上的离线文件能保留几天(一般7天)?...

相信大家都用过qq离线文件功能来跟好友发送离线文件。因为当对方不在线的时候也是可以使用发送离线文件功能。那么在我们发送的qq离线文件服务器上的离线文件能保留几天&#xff1f;因为我们发送的qq离线文件会自动保存在离线文件。它是有一定的时间期限。如果没有期限的话&…

失败的人生图片_人到中年,做事失败了,很可能是遇到了以下五种情况

人至中年&#xff0c;也到了迈入成功大门的时刻&#xff0c;但并非每个人都能在中年获得成功&#xff0c;相反&#xff0c;有不少人却在中年的时候失败。人至中年面临失败&#xff0c;其实原因有很多&#xff0c;但大多数情况下&#xff0c;可能是遇到了以下五种情况。究竟有哪…

Idea的debug断点调试

关于Idea的debug模式下线程断点的总结&#xff1a; 断点介绍&#xff1a; 如图所示&#xff0c;断点可以为所有断点和线程断点&#xff0c;每种断点还可以设置条件&#xff0c;条件满足时才会进入该断点。 1.当设置为All的时候 点击下发的下拉框&#xff0c;可以看到此时拦截…

ajax 传字符串到后台,JSON.stringify()将JSON对象转换为字符串通过Ajax传入到后台处理...

搜索热词最近在做一个小小的功能模块&#xff0c;前台有很多的数据需要传入到后台&#xff0c;前台页面设计如下&#xff1a;看起来不是很清楚&#xff0c;总之表单中的数据都要提交到后台进行处理&#xff0c;然后插入到数据库&#xff0c;而且是一起提交到后台的&#xff0c;…

lan pci 联想开机_微软承认KB4568831导致部分联想ThinkPad笔记本崩溃和蓝屏

在上周末悄然发布的支持文档中&#xff0c;微软承认 KB4568831 以及之后发布的累积更新导致部分联想 ThinkPad 笔记本出现了系统崩溃和蓝屏问题。其中关键错误包括“SYSTEM_THREAD_EXCEPTION_NOT_HANDLED” 崩溃&#xff0c;0xc0000005访问被拒绝&#xff0c;以及进程 ldiagio.…

dropdownlist ajax联动,asp.net省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs)示例...

本文主要列举了省市三级联动的DropDownListAjax的三种框架(aspnet/Jquery/ExtJs)示例。前段时间需要作一个的Web前端应用&#xff0c;需要用多个框架&#xff0c;一个典型的应用场景是省市三级联动&#xff0c;基于此应用&#xff0c;特将三种主要的ajax框架略作整理&#xff0…

苹果笔记本电脑亮度无法调节_苹果MacBook AirM1评测:M1芯片给您不一样的体验

哈喽&#xff0c;您好&#xff01;我是原呵呵&#xff0c;点点关注吧&#xff0c;更多精彩内容等着您M1 MacBook Air是一款神奇的笔记本电脑。不是因为它看起来特别新。这是一个奇迹&#xff0c;虽然它从外观上跟以前看起来没啥区别。它与以前运行相同的操作系统&#xff0c;并…

POI读取Excel文件时,row.getCell(0).getStringCellValue()报错:数字转换异常

在进行关键字驱动测试框架的搭建时&#xff0c;我们可能会遇到当单元格里的内容是手机号或者密码等数字时使用row.getCell(0).getStringCellValue()这个方法是会报错的&#xff0c;因为这牵扯到方法过时的原因&#xff1a; 所以我们可以使用以下的方法解决这个问题&#xff1a…

wps合并所有sheet页_表格高级筛选、表格合并,让表格处理事半功倍

今天给大家介绍WPS最受欢迎的2个表格功能&#xff0c;表格合并和表格高级筛选。这都是能够切实让工作事半功倍的功能&#xff0c;一定要掌握哦&#xff01;一、表格合并当我们有多个表格的内容需要合并到一个表格中&#xff0c;很多人会采取复制粘贴的方式。表格数量少时可能影…

Java代理设计模式(Proxy)的具体实现:静态代理和动态代理

Java代理设计模式(Proxy)的具体实现&#xff1a;静态代理和动态代理 实现方式一&#xff1a;静态代理静态代理方式的优点静态代理方式的缺点Java动态代理实现方式一&#xff1a;InvocationHandlerJava动态代理实现方式二&#xff1a;CGLIB用CGLIB实现Java动态代理的局限性 面…

golang 大数据平台_大数据平台是什么?有哪些功能?如何搭建大数据平台?

大数据平台是为了满足企业对于数据的各种要求而产生的。大数据平台&#xff1a;是指以处理海量数据存储、计算及不间断流数据实时计算等场景为主的一套基础设施。典型的包括Hadoop系列、Spark、Storm、Flink以及Flume/Kafka等集群。既可以采用开源平台&#xff0c;也可以采用华…

Spring 官方证实:框架爆大漏洞,JDK 9 及以上版本均受影响

继 Log4j 2 之后&#xff0c;听闻 Java 再次遭到漏洞攻击&#xff0c;这一次&#xff0c;似乎情况也更为严重&#xff0c;因为受到影响的是 Java 平台的开源全栈应用程序框架和控制反转容器实现——Spring 家族&#xff0c;而且网传漏洞还不止一个。 一直以来&#xff0c;Spri…