Java基础-IO相关

news2024/9/20 0:26:54

文章目录

    • 类层次结构
      • 1. `java.io` 包
        • 整体示意图
        • 核心类
        • 字节流(Byte Stream)
        • 字符流(Character Stream)
        • 其他辅助类
      • 2. `java.nio` 包
        • 示意图
        • 核心类
        • 文件操作
      • 总结
    • 字符流读写
      • 1. 字符流的核心类
        • 1.1 `Reader` 和 `Writer`
      • 2. 常用的字符流类
        • 2.1 字符输入流
        • 2.2 字符输出流
      • 3. 示例代码
        • 3.1 读取文本文件
        • 3.2 写入文本文件
      • 4. 使用 `InputStreamReader` 和 `OutputStreamWriter`
        • 4.1 从字节流读取字符
        • 4.2 向字节流写入字符
      • 5. 使用 `PrintWriter`
      • 总结
    • 字节流读写
      • 1. 字节流的核心类
        • 1.1 输入流
        • 1.2 输出流
      • 2. 示例代码
        • 2.1 读取二进制文件
        • 2.2 写入二进制文件
        • 2.3 使用 `DataInputStream` 和 `DataOutputStream`
      • 3. 使用 `InputStreamReader` 和 `OutputStreamWriter`
      • 总结
    • nio读写
      • 1. NIO 的核心组件
        • 1.1 缓冲区(Buffer)
        • 1.2 通道(Channel)
        • 1.3 选择器(Selector)
      • 2. 示例代码
        • 2.1 读取文本文件
        • 2.2 写入文本文件
        • 2.3 使用 `FileChannel` 读写文件
        • 2.4 使用 `Selector` 进行网络编程
      • 总结

类层次结构

Java 的 I/O 类库提供了丰富的 API 来处理输入/输出操作,包括文件读写、网络通信等。Java 的 I/O 类库主要分为两个部分:java.io 包和 java.nio 包。下面详细介绍这两个包中的核心类及其结构。

1. java.io

java.io 包是 Java 最初提供的 I/O 操作基础库,它主要基于流(Stream)的概念。java.io 包中的类大多采用阻塞式的 I/O 模型。

整体示意图

javaIO类示意图

核心类
  • InputStream/OutputStream:所有的字节流类都是从这两个抽象类派生出来的。
    • InputStream:表示字节输入流。
    • OutputStream:表示字节输出流。
  • Reader/Writer:所有的字符流类都是从这两个抽象类派生出来的。
    • Reader:表示字符输入流。
    • Writer:表示字符输出流。
字节流(Byte Stream)
  • FileInputStream/FileOutputStream:用于读写文件。
  • ByteArrayInputStream/ByteArrayOutputStream:用于在内存中读写字节数组。
  • PipedInputStream/PipedOutputStream:用于线程间的通信。
  • FilterInputStream/FilterOutputStream:过滤流,用于包装其他流并提供附加功能。
字符流(Character Stream)
  • FileReader/FileWriter:用于读写文件,以字符为单位。
  • StringReader/StringWriter:用于在内存中读写字符串。
  • BufferedReader/BufferedWriter:带缓冲区的字符流,提高读写效率。
  • InputStreamReader/OutputStreamWriter:用于将字节流转换为字符流。
  • PrintWriter:用于格式化输出。
其他辅助类
  • DataInputStream/DataOutputStream:用于读写基本数据类型。
  • ObjectInputStream/ObjectOutputStream:用于序列化和反序列化对象。
  • SequenceInputStream:合并多个输入流。

2. java.nio

java.nio 包提供了基于通道(Channel)和缓冲区(Buffer)的新 I/O 操作,主要用于提高 I/O 操作的性能。java.nio 包中的类通常是非阻塞式的,更适合于处理大量并发连接的场景。

示意图

nio示意图

核心类
  • Buffer:缓冲区,用于存储数据。

    • ByteBuffer:存储字节数据。
    • CharBuffer:存储字符数据。
    • IntBuffer:存储整型数据。
    • FloatBuffer:存储浮点型数据。
    • 等等。
  • Channel:通道,用于连接 Buffer 和实际的 I/O 设备。

    • FileChannel:用于文件 I/O。
    • DatagramChannel:用于 UDP 通信。
    • SocketChannel:用于 TCP 通信。
    • ServerSocketChannel:用于监听 TCP 连接。
  • Selector:选择器,用于多路复用 I/O 操作,管理多个 Channel。

文件操作
  • Files:提供静态方法来简化文件操作。
  • Paths:提供静态方法来创建和操作路径。
  • Path:表示文件系统的路径。

总结

java.io 包提供了一系列基于流的 I/O 操作,适用于简单的文件读写和网络通信。而 java.nio 包则提供了更高性能的 I/O 操作,适用于需要处理大量并发连接的应用场景。在实际开发中,可以根据具体的性能需求和技术背景选择合适的 I/O 模型。

字符流读写

Java 中的字符流(Character Stream)主要用于处理文本数据,因为它们以字符而不是字节的形式处理数据。字符流通常使用 java.io 包中的 ReaderWriter 类及其子类来实现。字符流非常适合用于处理文本文件,因为它们可以方便地处理 Unicode 字符。

1. 字符流的核心类

1.1 ReaderWriter
  • Reader:这是所有字符输入流的超类。
  • Writer:这是所有字符输出流的超类。

2. 常用的字符流类

2.1 字符输入流
  • FileReader:用于从文件中读取字符。
  • StringReader:用于从字符串中读取字符。
  • BufferedReader:带缓冲的字符输入流,提高了读取效率。
  • InputStreamReader:用于将字节流转换成字符流。
2.2 字符输出流
  • FileWriter:用于向文件中写入字符。
  • StringWriter:用于向字符串中写入字符。
  • BufferedWriter:带缓冲的字符输出流,提高了写入效率。
  • OutputStreamWriter:用于将字符流转换成字节流。
  • PrintWriter:用于格式化输出,常用于标准输出。

3. 示例代码

3.1 读取文本文件

使用 FileReaderBufferedReader 读取文本文件:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ReadTextFile {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.txt";
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
3.2 写入文本文件

使用 FileWriterBufferedWriter 写入文本文件:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class WriteTextFile {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.txt";
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            writer.write("Hello, World!");
            writer.newLine(); // 添加新行
            writer.write("This is a test file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 使用 InputStreamReaderOutputStreamWriter

有时候,我们需要将字节流转换为字符流,这时可以使用 InputStreamReaderOutputStreamWriter

4.1 从字节流读取字符

使用 InputStreamReader 从字节流中读取字符:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.io.IOException;

public class ReadFromByteStream {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.txt";
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
4.2 向字节流写入字符

使用 OutputStreamWriter 向字节流中写入字符:

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;
import java.io.IOException;

public class WriteToByteStream {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.txt";
        try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath)))) {
            writer.write("Hello, World!");
            writer.newLine(); // 添加新行
            writer.write("This is a test file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5. 使用 PrintWriter

PrintWriter 类提供了一些方便的方法来格式化输出,通常用于标准输出或文件输出。

import java.io.PrintWriter;
import java.io.FileWriter;
import java.io.IOException;

public class UsePrintWriter {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.txt";
        try (PrintWriter writer = new PrintWriter(new FileWriter(filePath))) {
            writer.println("Hello, World!");
            writer.println("This is a test file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

字符流非常适合处理文本数据,特别是在需要处理 Unicode 字符时。通过使用 ReaderWriter 及其子类,可以方便地实现文本文件的读写操作。此外,通过使用 InputStreamReaderOutputStreamWriter,还可以将字节流转换为字符流,从而更好地处理文本数据。

字节流读写

Java 中的字节流(Byte Stream)主要用于处理二进制数据,如图像、音频、视频等非文本数据。字节流是以字节为单位进行读写的,通常使用 java.io 包中的 InputStreamOutputStream 类及其子类来实现。

1. 字节流的核心类

1.1 输入流
  • InputStream:这是所有字节输入流的超类。
    • FileInputStream:用于从文件中读取字节。
    • ByteArrayInputStream:用于从字节数组中读取字节。
    • PipedInputStream:用于线程间通信。
    • FilterInputStream:过滤流,用于包装其他流并提供附加功能。
      • BufferedInputStream:带缓冲区的字节输入流,提高了读取效率。
      • DataInputStream:用于读取基本数据类型。
1.2 输出流
  • OutputStream:这是所有字节输出流的超类。
    • FileOutputStream:用于向文件中写入字节。
    • ByteArrayOutputStream:用于向字节数组中写入字节。
    • PipedOutputStream:用于线程间通信。
    • FilterOutputStream:过滤流,用于包装其他流并提供附加功能。
      • BufferedOutputStream:带缓冲区的字节输出流,提高了写入效率。
      • DataOutputStream:用于写入基本数据类型。

2. 示例代码

2.1 读取二进制文件

使用 FileInputStreamBufferedInputStream 读取二进制文件:

import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.IOException;

public class ReadBinaryFile {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.bin";
        try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath))) {
            int data;
            while ((data = bis.read()) != -1) {
                System.out.printf("%02X ", data); // 以十六进制格式打印每个字节
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
2.2 写入二进制文件

使用 FileOutputStreamBufferedOutputStream 写入二进制文件:

import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;

public class WriteBinaryFile {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.bin";
        byte[] bytes = {0x00, 0x01, 0x02, 0x03, 0x04};
        try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath))) {
            bos.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
2.3 使用 DataInputStreamDataOutputStream

使用 DataInputStreamDataOutputStream 来读写基本数据类型:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataIOExample {
    public static void main(String[] args) {
        String filePath = "/path/to/your/datafile.bin";

        // 写入数据
        try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(filePath))) {
            dos.writeInt(12345); // 写入整数
            dos.writeDouble(3.14); // 写入双精度浮点数
            dos.writeUTF("Hello, World!"); // 写入字符串
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取数据
        try (DataInputStream dis = new DataInputStream(new FileInputStream(filePath))) {
            int intValue = dis.readInt(); // 读取整数
            double doubleValue = dis.readDouble(); // 读取双精度浮点数
            String stringValue = dis.readUTF(); // 读取字符串
            System.out.println("Read values:");
            System.out.println("Integer: " + intValue);
            System.out.println("Double: " + doubleValue);
            System.out.println("String: " + stringValue);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 使用 InputStreamReaderOutputStreamWriter

有时候,需要将字节流转换为字符流,可以使用 InputStreamReaderOutputStreamWriter

import java.io.InputStream;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteToCharConversion {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.txt";

        // 读取字符
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 写入字符
        try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath)))) {
            writer.write("Hello, World!");
            writer.newLine(); // 添加新行
            writer.write("This is a test file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

字节流非常适合处理二进制数据,通过使用 InputStreamOutputStream 及其子类,可以方便地实现二进制文件的读写操作。此外,通过使用 DataInputStreamDataOutputStream,还可以方便地读写基本数据类型。如果需要将字节流转换为字符流,可以使用 InputStreamReaderOutputStreamWriter

nio读写

Java NIO(New Input/Output)是 Java 平台上的新一代输入/输出技术,它提供了更高效的 I/O 操作,特别是针对大数据量和高并发的应用场景。NIO 引入了缓冲区(Buffer)、通道(Channel)和选择器(Selector)等概念,使得 I/O 操作更加灵活和高效。

1. NIO 的核心组件

1.1 缓冲区(Buffer)

缓冲区用于存储数据,是 NIO 中进行数据读写的基础。常用的缓冲区包括:

  • ByteBuffer:用于存储字节数据。
  • CharBuffer:用于存储字符数据。
  • IntBuffer:用于存储整型数据。
  • FloatBuffer:用于存储浮点型数据。
  • DoubleBuffer:用于存储双精度浮点型数据。
  • ShortBuffer:用于存储短整型数据。
  • LongBuffer:用于存储长整型数据。
1.2 通道(Channel)

通道用于连接缓冲区和实际的 I/O 设备(如磁盘、网络等)。常用的通道包括:

  • FileChannel:用于文件 I/O。
  • DatagramChannel:用于 UDP 通信。
  • SocketChannel:用于 TCP 通信。
  • ServerSocketChannel:用于监听 TCP 连接。
1.3 选择器(Selector)

选择器用于多路复用 I/O 操作,可以同时监听多个通道上的事件(如可读、可写等)。

2. 示例代码

2.1 读取文本文件

使用 NIO 读取文本文件:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;

public class ReadTextFileWithNIO {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.txt";
        try {
            // 使用 Files.readAllLines 读取整个文件
            List<String> lines = Files.readAllLines(Paths.get(filePath), StandardCharsets.UTF_8);
            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
2.2 写入文本文件

使用 NIO 写入文本文件:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;

public class WriteTextFileWithNIO {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.txt";
        String content = "Hello, World!\nThis is a test file.";
        try {
            // 使用 Files.write 写入整个文件
            Files.write(Paths.get(filePath), content.getBytes(StandardCharsets.UTF_8));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
2.3 使用 FileChannel 读写文件

使用 FileChannelBuffer 读写文件:

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class FileChannelExample {
    public static void main(String[] args) {
        String filePath = "/path/to/your/file.bin";
        
        // 写入数据
        try (FileChannel channel = FileChannel.open(Paths.get(filePath), StandardOpenOption.WRITE, StandardOpenOption.CREATE)) {
            ByteBuffer buffer = ByteBuffer.allocate(1024); // 创建缓冲区
            buffer.put("Hello, World!".getBytes()); // 将数据放入缓冲区
            buffer.flip(); // 切换到读取模式
            channel.write(buffer); // 写入数据
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取数据
        try (FileChannel channel = FileChannel.open(Paths.get(filePath), StandardOpenOption.READ)) {
            ByteBuffer buffer = ByteBuffer.allocate(1024); // 创建缓冲区
            int bytesRead = channel.read(buffer); // 读取数据
            if (bytesRead > 0) {
                buffer.flip(); // 切换到读取模式
                byte[] data = new byte[buffer.limit()];
                buffer.get(data); // 从缓冲区获取数据
                System.out.println(new String(data)); // 打印数据
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
2.4 使用 Selector 进行网络编程

使用 Selector 监听 TCP 连接:

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;

public class SelectorExample {
    public static void main(String[] args) {
        int port = 1234;
        try {
            ServerSocketChannel serverChannel = ServerSocketChannel.open();
            serverChannel.socket().bind(new InetSocketAddress(port));
            serverChannel.configureBlocking(false);

            Selector selector = Selector.open();
            serverChannel.register(selector, SelectionKey.OP_ACCEPT);

            while (true) {
                int readyChannels = selector.select();
                if (readyChannels == 0) continue;

                for (SelectionKey key : selector.selectedKeys()) {
                    if (key.isAcceptable()) {
                        ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
                        SocketChannel clientChannel = ssc.accept();
                        clientChannel.configureBlocking(false);
                        clientChannel.register(selector, SelectionKey.OP_READ);
                    } else if (key.isReadable()) {
                        SocketChannel clientChannel = (SocketChannel) key.channel();
                        ByteBuffer buffer = ByteBuffer.allocate(1024);
                        int bytesRead = clientChannel.read(buffer);
                        if (bytesRead > 0) {
                            buffer.flip();
                            byte[] data = new byte[buffer.limit()];
                            buffer.get(data);
                            System.out.println(new String(data));
                        }
                    }
                }
                selector.selectedKeys().clear();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

NIO 提供了更高效的数据读写机制,特别是对于大数据量和高并发的应用场景非常有用。通过使用 BufferChannelSelector,可以实现更灵活的 I/O 操作。在实际应用中,可以根据具体的需求选择适合的 NIO 类来实现高效的数据处理。

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

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

相关文章

vue3写一个无限树形菜单,递归组件

原本使用element plus的el-tree&#xff0c;可是他的UI不匹配&#xff0c;狠难改成自己想要的&#xff0c;所以只能自己去写一个&#xff0c;做法&#xff1a;使用递归组件 效果 组件代码itemDir.vue // itemDir.vue<template><div><ul v-for"node in li…

Java+Swing+sqlserver学生成绩管理系统

JavaSwingsqlserver学生成绩管理系统 一、系统介绍二、系统展示1.登陆2.课程分配3.选课管理4.学生打分--教师4.查询个人成绩--学生 三、其他1.其它系统 一、系统介绍 管理员:登陆页面、课程管理、选课管理 老师&#xff1a;给学生打分 学生&#xff1a;查询个人成绩 二、系…

景联文科技:专业图像采集服务,助力智能图像分析

景联文科技是专业数据服务公司&#xff0c;致力于为人工智能企业提供从数据采集、清洗到标注的全流程解决方案。协助客户解决AI开发过程中数据处理环节的关键问题&#xff0c;助力企业实现智能化转型。 1.多样化的图像采集服务 景联文科技提供多样化的图像采集服务&#xff0c…

7.9.17 Readiness Time Reporting Extended Capability

RTR提供了一种可选机制&#xff0c;用于描述设备或功能进入准备状态所需的时间。在指示的情况下&#xff0c;允许软件在等待此功能中公告的时间后向设备或功能发出请求&#xff0c;并且无需等待其他地方所需的&#xff08;更长&#xff09;时间。 软件允许在最早的时间发出请求…

【漏洞复现】赛蓝企业管理系统 GetJSFile 任意文件读取漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

策略模式的小记

策略模式 策略模式支付系统【场景再现】硬编码完成不同的支付策略使用策略模式&#xff0c;对比不同&#xff08;1&#xff09;支付策略接口&#xff08;2&#xff09;具体的支付策略类&#xff08;3&#xff09;上下文&#xff08;4&#xff09;客户端&#xff08;5&#xff0…

【Redis】Redis Sentinel(哨兵)系统:自动故障恢复与高可用性配置全解

目录 哨兵 (Sentinel)基本概念主从复制的问题⼈⼯恢复主节点故障哨兵⾃动恢复主节点故障 安装部署 (基于 docker)准备⼯作 以下部分是独立于这一章节的Docker安装Server版本安装CentOS安装实战经验 GUI版本安装&#xff08;以windows 11为例&#xff09;安装docker 以上部分是独…

elementUI table 给表头添加气泡显示(鼠标悬浮显示注释)

elementUI table 给表头添加气泡显示&#xff08;鼠标悬浮显示注释&#xff09; 前言&#xff1a;文档显示&#xff1a;&#xff08;使用插槽&#xff0c;我看看到底是怎么个事儿&#xff09;文档代码:修改后的效果&#xff1a;页面效果&#xff1a; 前言&#xff1a; 公司出现…

Termius for Mac/Win:高效、安全的跨平台多协议远程管理软件

Termius for Mac/Win是一款专为专业人士设计的跨平台多协议远程管理软件&#xff0c;以其强大的功能、简洁的界面和高效的操作体验&#xff0c;赢得了广泛的好评。这款软件不仅支持SSH、Telnet、SFTP等多种远程连接协议&#xff0c;还具备丰富的安全特性和便捷的管理功能&#…

免费的月考成绩发布小程序

月考成绩出炉&#xff0c;老师们便开始了一项既繁琐又耗时的工作&#xff1a;将成绩单私信给每位学生家长。需要老师们在繁忙的教学工作中抽出自己额外休息的时间&#xff0c;还要确保每位家长都能及时准确的收到自己孩子的成绩单。然而&#xff0c;随着科技的发展&#xff0c;…

歌者PPT新功能速递!

本期功能更新&#xff0c;主要围绕 PPT 大纲编辑器和 PPT 翻译功能&#xff0c;全面提升了制作效率和灵活性&#xff0c;帮助你更轻松地完成 PPT 制作&#xff01;一起来看看吧&#xff5e;&#x1f447; # 功能更新 1 PPT 大纲编辑器全面更新 &#x1f4dd; 现在&#xff0c…

StarRocks Lakehouse 快速入门——Apache Iceberg

导读&#xff1a; StarRocks Lakehouse 快速入门旨在帮助大家快速了解湖仓相关技术&#xff0c;内容涵盖关键特性介绍、独特的优势、使用场景和如何与 StarRocks 快速构建一套解决方案。最后大家也可以通过用户真实的使用场景来了解 StarRocks Lakehouse 的最佳实践&#xff01…

C++入门(03)新手常见问题集锦(一)

文章目录 1. 一闪而过使用system("pause")使用cin.get() 1. 一闪而过 .exe 在用户计算机上运行后“一闪而过”&#xff0c;因为控制台程序没有专门的用户图形界面&#xff0c;当程序执行完所有代码后就会自动关闭窗口。 使用system(“pause”) 在程序的结尾处加入…

Iceberg与SparkSQL整合DDL操作

前言 使用SparkSql操作Iceberg表之前我们得先配置好catalog&#xff0c;配置方式参考这篇博客。 创建非分区表 Spark3使用USING iceberg来创建表&#xff1a; CREATE TABLE prod.db.sample (id bigint NOT NULL COMMENT unique id,data string) USING iceberg;这里的数据类…

伦敦银ATR策略

ATR这个技术指标由J.Welles Wilder发明&#xff0c;‌主要用来衡量伦敦银的价格波动&#xff0c;它虽然‌不能直接反映银价走向及其趋势稳定性&#xff0c;但‌ATR指标价值越高&#xff0c;‌趋势改变的可能性就越高&#xff1b;‌价值越低&#xff0c;‌趋势的移动性就越弱。 …

麒麟安全加固工具,为系统打造坚固“金钟罩”!

当今数字化时代&#xff0c;系统安全的重要性不言而喻。为应对网络安全风险、满足用户高等级安全诉求&#xff0c;麒麟软件打造了满足用户高等级安全诉求的 “麒麟安全加固工具”&#xff0c;实现服务器操作系统安全配置的规范化、标准化、制度化&#xff0c;为系统安全打造坚固…

node.js、php、Java、python校园点餐与数据分析系统 校园食堂订餐系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

uni-app--》打造个性化壁纸预览应用平台(三)

&#x1f3d9;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名前端工程师 &#x1f304;个人主页&#xff1a;亦世凡华、 &#x1f306;系列专栏&#xff1a;uni-app &#x1f307;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

微服务注册中心都有哪些

在微服务架构中&#xff0c;注册中心扮演着至关重要的角色&#xff0c;用于服务的注册与发现。以下是一些常见的注册中心&#xff1a; Eureka&#xff1a; Eureka是Netflix开发的服务发现框架&#xff0c;后来贡献给了Spring Cloud。它主要用于AWS云&#xff0c;但也可以在其他…

【MySQL超详细安装步骤】Centos7安装MySQL8

文章目录 1.卸载2.修改yum源为阿里源2.1首先检查是否安装wget2.2 备份 yum 源文件2.3 下载阿里云yum源文件2.4 清理yum缓存 3.安装mysql源3.1 下载mysql源3.2 安装mysql源3.3 检查是否安装成功 4. 安装MySQL4.1 使用yum安装4.2 启动MySQL 5.配置防火墙5.1 开放3306端口 6.登录M…