IO(JavaEE初阶系列8)

这篇具有很好参考价值的文章主要介绍了IO(JavaEE初阶系列8)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

1.文件

1.1认识文件

1.2结构和目录

1.3文件路径

1.4文本文件vs二进制文件

2.文件系统的操作

2.1Java中操作文件

2.2File概述

2.2.1构造File对象

2.2.2File中的一些方法

3.文件内容的操作

3.1字节流

3.1.1InPutStream的使用方法

3.1.2OutPutStream的使用方法

3.2字符流

3.2.1Reader的使用方法

3.2.2Writer的使用方法

4.文件操作的案例

结束语:


前言:

在之前的博客中小编主要是与大家分享了多线程中的一些东西,在这节中小编就与大家分享一下IO方面一些知识吧!

1.文件

1.1认识文件

我们先来认识一下狭义上的文件,针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般。那么我们平时谈到的“文件”,指的都是硬盘上的文件。

硬盘(外存)与内存相比:

  • 速度:内存比硬盘快很多。
  • 空间:内存空间比硬盘小。
  • 成本:内存比硬盘贵。
  • 持久化:内存掉电后数据丢失,外存掉电后数据还在。

像我们之前学习的java代码都是围绕着内存展开的,我们的JavaSE + 数据结构里面,定义一个变量,其实就是在内存上申请空间的。MYSQL主要就是操作硬盘。文件这里的IO也就是操作硬盘了,这里我们会学习文件的系统操作文件的内容操作。在文件的系统操作里我们主要学习的是创建文件、删除文件、重命名文件、创建目录....。在文件的内容操作中我们主要学习的就是针对文件内容进行读和写的操作。 下面我们会给大家一一展开介绍的。

1.2结构和目录

计算机的目录是有层级结构的,在计算机中我们是把文件夹叫做目录。如下所示就是计算机中的一个层级目录展示,这里的目录太多了小编没有全部展示出来,大家只要明白就可以了。

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

 通过上图我们可以看到文件系统是以树型结构来组织文件和目录的。他是一个N叉树。

1.3文件路径

文件路径:就是从树根结点出发,沿着树杈一路往下走,到达目标文件,此时这中间经过的内容就是文件的路径。

在Windows中都是从“此电脑”起头的,表示路径的时候,可以把“此电脑”省略,直接从盘符开始表示。如下所示就是一个文件的路径。

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

我们实际路径的表示是通过字符串表示的,每个目录之间使用 /(反斜杠)或者是 \(斜杠)来分隔。 如下所示:

D:\Java学习代码记录\JavaGitee代码提交\java-ee-elementary

上述的反斜杠只是在Windows中适用,代码中写需要写成\\,是需要转义字符的。

在上述的路径中我们可以看到我们都是从盘符开始往下寻找的文件路径,那么这种路径就叫绝对路径。如果是从给定的目录出发,一层一层往下找,这个过程得到的路径就叫相对路径。这里我们提到的给定的目录是基准目录也叫工作目录。那么工作目录又是啥,那么下来我们来具体看一下案例。

假设我们现在的工作目录是下面这个。 

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

此时我们要找到的是

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

那么此时我们的相对路径表示就是:./JavaGitee代码提交/java-ee-elementary/JavaEE-2023.8.2

假设我们现在的工作目录是下面的这个:

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

 那么此时我们要找的是这个:

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

 那么此时我们的相对路径表示就是:./java-ee-elementary/JavaEE-2023.8.2/src/Main.java

在上述的相对路径表示法中我们看到 · 它是一个特殊符号,表示的是当前目录,还有一种是 ·· 也是一种特殊符号,表示的是目录的上级目录。

注意:

在文件系统上,任何一个文件对应的路径是唯一的,不会存在两个路径相同,但是文件不同的情况!!!在Linux中可能会存在一个文件有两个不同路径可以找到它,但是在Windows中可以认为路径和文件是一一对应的关系,路径就相当于是一个“文件”的身份标识。

1.4文本文件vs二进制文件

文本文件存储的是文本,文本都是由ASCII字符构成的,对于ASCII来说它的表示范围是0-127,由于不够表示我们所有的字符,后来就又搞了其他编码方式,例如utf-8之类的,就可以针对其他语言文字符号进行编码了。

二进制文件存储的是二进制数据,它是没有任何字符集的限制,存啥都行。

那么我们又该怎么判断存储的文本还是二进制呢?

一个简单的判定方式就是直接按照记事本的方式打开文件,如果可以看懂就说明是文本存储,如果看不懂就说明是二进制存储。如下例子所示:

下面的这种就是二进制文本:
IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

下面这种能看懂的就是文本文件:

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java 

2.文件系统的操作

2.1Java中操作文件

在Java中通过java.io.File类来对一个文件(包括目录)进行抽象的描述。在Java标准库中给我们提供了一个类叫File类,File对象是硬盘上的一个文件的“抽象”表示。

这里的文件是存储在硬盘上的如果直接通过代码来操作硬盘,不太方便,就在内存中创建一个对应的对象,操作这个内存中对象,就可以间接的影响到硬盘的文件情况了。这就相当于是电视机和遥控器一样,这里的File就是遥控器可以操作硬盘。下面我们来具体看一下吧。

2.2File概述

2.2.1构造File对象

在我们构造的过程中可以使用绝对路径也可以使用相对路径进行初始化,这个路径指向的文件,可以是真实存在的,也可以是不存在的,下面我们用代码来具体给大家来演示一下。

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java 

2.2.2File中的一些方法

在File中给我们提供了很多方法,如下所示:

修饰符及返回值类型 方法签名 说明
String getParent() 返回File对象的父目录文件路径
String getName() 返回File对象的纯文件名称
String getPath() 返回File对象的文件路径
String getAbsolutePath() 返回File对象的绝对路径
String exists() 判断File对象描述的文件是否真实存在
boolean isDirctory() 判断File对象代表的文件是否是一个目录
boolean isFile() 判断File对象代表的文件是否是一个普通文件
boolean createNewFile() 根据File对象,自动创建一个空文件,成功创建后返回true
boolean delete() 根据File对象,删除该文件,成功删除后返回true
void deleteOnExit() 根据File对象,标注文件将被删除,删除动作会到JVM运行结束时才会进行
String[] list() 返回File对象代表的目录下的所有文件名
File[] listFiles() 返回File对象代表的目录下的所有文件,以File对象表示
boolean mkdir() 创建File对象代表的目录
boolean mkdirs() 创建File对象代表的目录,如果必要,会创建中间目录
boolean renameTo(Filedest) 进行文件改名,也可视为我们平时的剪切、粘贴操作
boolean canRead() 判断用户是否对文件有可读权限
boolean canWrite() 判断用户是否对文件有可写权限

下面就给大家来演示一下个别操作:
代码展示:

package io;

import java.io.File;
import java.io.IOException;

public class IODemo1 {
    public static void main(String[] args) throws IOException {
        //就可以通过File对象进行操作了
        File file = new File("./cat.jpg");
        //返回File对象的父目录文件路径
        System.out.println(file.getParent());
        //返回File对象的纯文件名称
        System.out.println(file.getName());
        //返回File对象的文件路径
        System.out.println(file.getPath());
        //返回File对象的绝对路径
        System.out.println(file.getAbsolutePath());
        //返回File对象的修饰过的绝对路径
        System.out.println(file.getCanonicalPath());
    }
}

结果展示:

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java 

由于idea的工作目录就是项目所在目录,所以当我们在新创建的时候就会在该项目的目录下。如下所示,在执行完代码之后我们就可看到在项目中多了一个“hello_world.txt”。

代码展示:

package io;

import java.io.File;
import java.io.IOException;

public class IODemo2 {
    public static void main(String[] args) throws IOException {
        //在相对路径中,./通常可以省略
        File file = new File("./hello_world.txt");
        System.out.println("创建文件之前:");
        //判断File文件是否存在
        System.out.println(file.exists());
        //判断File对象代表的文件是否是一个目录
        System.out.println(file.isDirectory());
        //判断File对象代表的文件是是否是一个普通文件
        System.out.println(file.isFile());

        System.out.println("创建文件之后:");
        //创建文件
        file.createNewFile();
        //判断File文件是否存在
        System.out.println(file.exists());
        //判断File对象代表的文件是否是一个目录
        System.out.println(file.isDirectory());
        //判断File对象代表的文件是是否是一个普通文件
        System.out.println(file.isFile());

    }
}

结果展示:
IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java 

如果我们要删除目录呢?我们就可以使用delete操作来进行删除,如下所示。

代码展示:

package io;

import java.io.File;
import java.io.IOException;

public class IODemo2 {
    public static void main(String[] args) throws IOException {
        //在相对路径中,./通常可以省略
        File file = new File("./hello_world.txt");
        System.out.println("创建文件之前:");
        //判断File文件是否存在
        System.out.println(file.exists());
        //判断File对象代表的文件是否是一个目录
        System.out.println(file.isDirectory());
        //判断File对象代表的文件是是否是一个普通文件
        System.out.println(file.isFile());

        System.out.println("创建文件之后:");
        //创建文件
        file.createNewFile();
        //判断File文件是否存在
        System.out.println(file.exists());
        //判断File对象代表的文件是否是一个目录
        System.out.println(file.isDirectory());
        //判断File对象代表的文件是是否是一个普通文件
        System.out.println(file.isFile());

        //删除文件
        file.delete();
        System.out.println("删除文件之后:");
        System.out.println(file.exists());
    }
}


结果展示:

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java 

 IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java 

我们可以看到在工作目录中就不存在该文件了。 

我们还可以通过File来创建目录。

代码展示:

package io;

import java.io.File;

public class IODemo3 {
    public static void main(String[] args) {
        File file = new File("test-dir/aaa/bbb");
        //只创建一级目录
//        file.mkdir();
        //创建多级目录
        file.mkdirs();
    }
}


结果展示:

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

也可以使用File里的方法来返回目录下的文件名。

代码展示:

package io;

import java.io.File;
import java.util.Arrays;

public class IODemo4 {
    public static void main(String[] args) {
        File file = new File("test-dir");
        //返回File对象代表的目录下的所有文件名
        String[] results = file.list();
        System.out.println(Arrays.toString(results));
        //返回File对象代表的目录下的所有文件,以File对象表示
        File[] results2 = file.listFiles();
        System.out.println(Arrays.toString(results2));
    }
}


结果展示:

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

还可以个对象重命名。

代码展示:

package io;

import java.io.File;

public class IODemo5 {
    public static void main(String[] args) {
        //重命名
        File src = new File("./test-dir");
        File dest = new File("./test222");
        src.renameTo(dest);
    }
}

结果展示:
IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

3.文件内容的操作

针对文本文件,提供了一组类,统称为“字符流”(典型的代表是:Reader,Writer),它基本的读写单位是字符

针对二进制文件,提供了一组类,统称为“字节流”(典型代表:InputSteam,OutputStream),它基本的读写单位是字节

针对于上述“流”这个概念在英文中写作“Steam”,如果让你从文件中读取100个字节的数据,你的读法就会有很多种,可能一次读取一个字节,分100次读完,也可能会读取2个字节分50次读完,就这样像水流一样不断地读取数据。

针对于流对象,又分成两种:

  • 输入的:Reader,InputSteam
  • 输出的:Writer,OutPutSteam

这里就需要我们分清楚从哪里是输入,从哪里到哪里又是输出。下面我们可以画图来理解一下。

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java 

下面我们就来分别给大家讲解一下字符流和字节流中的几个重要的用法。 

3.1字节流

3.1.1InPutStream的使用方法

InputStream是用来IO操作的,IO不仅仅是读写硬盘的文件,它还可以用来读写别的,这个后面在学习网络编程的时候会给大家交代。

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

在后面的括号中我们要指定一个要读的文件的路径。

这里可能就有同学好奇了,为什么在实例化的时候不是直接new 一个 InputStream呢?这里给大家解释一下,我们可以看到在InputStream的原码中是一个抽象类,抽象类是不能够实例化的。所以就出现了上述代码new了一个FileInputStream的情况。 

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java 

这里我们在D盘中先新建一个文件命名为test.txt,并在里面编写一些文字。

 IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

下面我们就来使用一下InputStream。

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

这里的意思就是让这个变量能够和硬盘上的文件关联起来,此时就相当于有了遥控器。

但是此时读取完毕之后一定要记得关闭资源。

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

注意:这个关闭操作非常重要,这个操作如果忘记的话,可能就会导致文件资源泄漏。

所以为了保证一定可以执行到关闭操作,我们可以借助finally来做。如下所示:

package io;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class IODemo7 {
    public static void main(String[] args) throws IOException {
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream("d:/Java学习代码记录/JavaGitee代码提交/java-ee-elementary/test.txt");
        } finally {
            inputStream.close();
        }
    }
}

虽然这样也可以实现,并且可以保证一定可以执行到关闭操作的代码,但是我们并不提倡这样写,因为代码风格不太好,那么我们可以使用下面的这个操作来写。写好创建实例代码之后,然后按住Ctrl+Alt+T,然后选中下面的带有资源的try操作即可。在try结束之后就会自动执行close操作,这样就可以保证代码会执行close操作了。

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java下面我们就可以读取test.txt文件里面的内容了。

代码展示:

package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class IODemo8 {
    public static void main(String[] args) throws IOException {
        try (InputStream inputStream = new FileInputStream("d:/Java学习代码记录/JavaGitee代码提交/java-ee-elementary/test.txt")) {
            //读文件
            //read一次返回的是一个字节,但是此处的返回类型是int
            while (true) {
                int b = inputStream.read();
                if (b == -1) {
                    //读到末尾了,结束循环即可
                    break;
                }
                System.out.printf("%x\n",b);
            }
        }

    }
}

结果展示:

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

 

3.1.2OutPutStream的使用方法

代码展示:

package io;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class IODemo9 {
    public static void main(String[] args) throws IOException {
        try (OutputStream outputStream = new FileOutputStream("d:/Java学习代码记录/JavaGitee代码提交/java-ee-elementary/test.txt")) {
            outputStream.write(97);
            outputStream.write(98);
            outputStream.write(99);
        }
    }
}

结果展示:

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

3.2字符流

3.2.1Reader的使用方法

我们和上述的操作是一样的,首先先创建对象然后打开指定的路径。然后再进行读文件的操作,最后在关闭文件,这里的同样使用的是资源的try操作来进行关闭资源。这里我们从test.txt文件读取数据。

代码展示:

package io;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class IODemo10 {
    public static void main(String[] args) throws FileNotFoundException {
        try (Reader reader = new FileReader("d:/Java学习代码记录/JavaGitee代码提交/java-ee-elementary/test.txt")) {
            while (true) {
                int c = reader.read();
                if (c == -1) {
                    break;
                }
                char ch = (char)c;
                System.out.println(ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


结果展示: 

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

 

3.2.2Writer的使用方法

与上述几个的使用方式都是一样的,这里小编就直接给大家来展示一下代码的实现吧。

代码展示:

package io;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class IODemo11 {
    public static void main(String[] args) throws IOException {
        try (Writer writer = new FileWriter("d:/Java学习代码记录/JavaGitee代码提交/java-ee-elementary/test.txt")) {
            writer.write(65);
            writer.write(66);
            writer.write(67);
        }
    }
}

结果展示:
IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

 

4.文件操作的案例

案例1:扫描指定目录,并找到名称或者内容中包含指定字符的所有普通文件(不包含目录)。

这个就相当于是遍历目录,在里面的文件内容中查找。类似于检索操作。

这里我们直接写一个简单粗暴的办法:

  1. 先去递归的遍历目录,比如给定一个d:/去递归的把这里包含的所有文件都列出来。
  2. 每次找到一个文件,都打开,并读取文件内容(得到String)。
  3. 在判断要查找的词,是否在上述文件内容中存在,如果存在,结果即为所求。

代码展示:

package io;

import java.io.*;
import java.util.Scanner;

public class IODemo12 {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner scanner = new Scanner(System.in);
        //1.先让用户指定一个要搜索的根目录
        System.out.println("请输入要扫描的根目录:");
        File rootDir = new File(scanner.next());
        if (!rootDir.isDirectory()){
            System.out.println("输入有误,您输入的目录不存在!");
            return;
        }
        //2.让用户输入一个要查找的词
        System.out.println("请输入要查找的词:");
        String word = scanner.next();

        //3.递归的进行目录/文件的遍历
        scanDir(rootDir,word);
    }

    private static void scanDir(File rootDir, String word) throws FileNotFoundException {
        //列出当前的rootDir中的内容,没有内容,直接递归结束
        File[] files = rootDir.listFiles();
        if (files == null) {
            //当前rootDir是一个空目录,这里啥都没有
            //没必要在进行递归了
            return;
        }
        //目录里有内容,就遍历目录中的每个元素
        for (File f : files) {
            System.out.println("当前搜索到的结果是:" + f.getAbsolutePath());
            if (f.isFile()) {
                //是普通文件
                //打开文件,读取内容,比较看是否包含上述的关键字
                String content = readFile(f);
                if (content.contains(word)){
                    System.out.println(f.getAbsolutePath() + "包含要查找的关键字!");
                }
            } else if (f.isDirectory()) {
                //是目录
                //进行递归操作
                scanDir(f,word);
            }else {
                //不是普通文件,也不是目录文件,直接跳过
                continue;
            }
        }
    }

    private static String readFile(File f) throws FileNotFoundException {
        //读取文件的整个内容,返回出来
        //使用字符流来读取,由于咱们匹配的是字符串,此处只能按照字符流处理,才是有意义的
        StringBuilder stringBuilder = new StringBuilder();
        try (Reader reader = new FileReader(f)) {
            //一次读取一个字符,把读到的结果给拼装到stringBuilder中,同一转换成String
            while (true) {
                int c = reader.read();
                if (c == -1){
                    break;
                }
                stringBuilder.append((char) c);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }
}


结果展示:

IO(JavaEE初阶系列8),JavaEE初阶,java-ee,java

结束语:

这节中小编主要是与大家介绍了文件中的IO操作,希望这节对大家了解文件的IO操作有一定帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)文章来源地址https://www.toymoban.com/news/detail-628341.html

到了这里,关于IO(JavaEE初阶系列8)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java EE初阶十七】网络原理(二)

    2.2.2 关于可靠传输 4.滑动窗口         前面的三个机制,都是在保证 tcp 的可靠性;         TCP 的可靠传输,是会影响传输的效率的.(多出了一些等待 ack 的时间,单位时间内能传输的数据就少了);         滑动窗口,就让可靠传输对性能的影响,更少一些.TCP 只要引入了可

    2024年02月20日
    浏览(43)
  • 【Java EE初阶十六】网络原理(一)

            在网络原理中主要学习TCP/IP四层模型中的重点网络协议         应用层是和程序员接触最密切的;         应用程序:在应用层这里,很多时候都是程序员自定义应用层协议(步骤:1、根据需求,明确要传输的信息,2、约定好信息按照什么样的格式来组织)的

    2024年02月20日
    浏览(38)
  • 网络原理(JavaEE初阶系列11)

    目录 前言: 1.网络原理的理解 2.应用层 2.1自定义协议的约定 2.1.1确定要传输的信息 2.1.2确定数据的格式 3.传输层 3.1UDP 3.1.1UDP报文格式 3.2TCP 3.2.1确认应答 3.2.2超时重传 3.2.3连接管理 3.2.3.1三次握手 3.2.3.2四次挥手 3.2.4滑动窗口 3.2.5流量控制 3.2.6拥塞控制 3.2.7延时应答 3.2.8捎带

    2024年02月13日
    浏览(47)
  • CSS(JavaEE初阶系列14)

    目录 前言: 1.CSS是什么 1.1CSS基本语法 2.引入样式 2.1内部样式表 2.2行内样式表 2.3外部样式 3.选择器 3.1选择器的种类 3.1.1基础选择器 3.1.2复合选择器 4.常用元素属性 4.1字体属性 4.2文本属性 4.3背景属性 4.4圆角矩形 4.5元素的显示模式 4.6盒模型 4.7内边距 4.8外边距 4.9弹性布局

    2024年02月12日
    浏览(41)
  • 多线程(JavaEE初阶系列2)

    目录 前言: 1.什么是线程 2.为什么要有线程 3.进程与线程的区别与联系 4.Java的线程和操作系统线程的关系 5.多线程编程示例 6.创建线程 6.1继承Thread类  6.2实现Runnable接口 6.3继承Thread,使用匿名内部类 6.4实现Runnable接口,使用匿名内部类 6.5lambda表达式创建Runnable子类对象 7.

    2024年02月15日
    浏览(40)
  • JavaScript(JavaEE初阶系列13)

    目录 前言: 1.初识JavaScript 2.JavaScript的书写形式 2.1行内式 2.2内嵌式 2.3外部式 2.4注释 2.5输入输出 3.语法 3.1变量的使用 3.2基本数据类型 3.3运算符 3.4条件语句 3.5循环语句 3.6数组 3.7函数 3.8对象 3.8.1 对象的创建 4.案例演示 4.1猜数字游戏 4.2聚合搜索 4.3表白墙 结束语: 在上节

    2024年02月12日
    浏览(34)
  • 多线程(JavaEE初阶系列7)

    目录 前言: 1.常见的锁策略 1.1乐观锁和悲观锁 1.2轻量级锁和重量级锁 1.3自旋锁和挂起等待锁 1.4互斥锁与读写锁 1.5可重入锁与不可重入锁 1.6公平锁与非公平锁 2.CAS 2.1什么是CAS 2.2自旋锁的实现 2.3原子类 3.synchronized 3.1synchronized的原理以及基本特点 3.2偏向锁 3.3轻量级锁 3.4重

    2024年02月14日
    浏览(37)
  • 多线程(JavaEE初阶系列4)

    目录 前言: 1.单例模式 1.1饿汉模式 1.2懒汉模式 1.3结合线程安全下的单例模式 1.4单例模式总结 2.阻塞式队列 2.1什么是阻塞队列 2.2生产者消费者模型 2.2.1 上下游模块之间进行“解耦合” 2.2.2削峰填谷 2.3阻塞队列的实现 结束语: 在上节中小编主要与大家分享了多线程中遇到

    2024年02月15日
    浏览(54)
  • 初识网络(JavaEE初阶系列9)

    目录 前言: 1.网络的发展史 1.1独立模式 1.2网络互联 1.3局域网LAN 1.4广域网WAN 2.网络通信基础 2.1IP地址 2.2端口号 3.认识协议 3.1协议分层 3.2分层的作用 3.3TCP/IP五层(或四层)模型 3.4OSI七层模型 3.5网络设备所在分层 4.封装和分用 结束语: 网络的主要发展大体可以分为这四个阶

    2024年02月14日
    浏览(39)
  • 了解JVM(JavaEE初阶系列19)

    目录 前言: 1.JVM是如何运行的 2.JVM中的内存区域划分 3.JVM的类加载机制 3.1JVM加载机制的五大步骤 3.1.1加载 3.1.1验证 3.1.1准备 3.1.1解析 3.1.1初始化 3.2总结 3.3JVM启动时机 3.4双亲委派模型 4.JVM中的垃圾回收策略 4.1JVM垃圾回收机制概念 4.2垃圾回收策略 4.2.1判断引用是否有指向 4

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包