Java中的IO流-最全最基础的IO流概述和简介

在这里插入图片描述

IO流简介

IO是什么

Java中的IO流是用于处理数据输入和输出的核心机制。通过应用IO流可以使Java程序能够与外部世界(如磁盘文件、网络、硬件设备等)进行数据交互。IO流的全称为输入/输出流(Input/Output Stream),它是Java编程语言中用于数据传输的一种抽象模型。流可以被想象为数据的连续流动,就像水通过管道一样,数据通过流从一个地方流向另一个地方。
在这里插入图片描述

应用场景

IO流在Java开发中几乎无处不在,任何涉及到数据读写的地方都会用到IO流。常见的应用场景包括文件读写、网络通信、数据持久化等

IO流的分类

IO流的分类可以从多个维度进行理解

  • 按流的方向:可以分为输入流InputStream)和输出流(FileOutputStream)
  • 按流的功能:可以分为节点流和处理流
  • 按数据处理单元:可以分为字节流(以字节读写为基本单位)和字符流(以字符读写为基本单位)

流的超类类型

在Java中,输入输出(IO)流的超类主要有两类,分别对应于字节流和字符流.

  1. 字节流(Byte Streams)
  • java.io.InputStream:所有字节输入流的超类。定义了从源读取字节的基本方法
  • java.io.OutputStream:所有字节输出流的超类。定义了向目的地写入字节的基本方法
  1. 字符流(Character Streams)
  • java.io.Reader:字符输入流的超类,定义了从源读取字符的基本方法
  • java.io.Writer:字符输出流的超类,定义了向目的地写入字符的基本方法

这些超类提供了基本的读写操作,而它们的子类则实现了特定的读写功能,例如从文件读取、向网络套接字写入、数据的缓冲等。例如:

  • 字节流的具体实现包括:
    • FileInputStream和FileOutputStream:用于读写文件。
    • BufferedInputStream和BufferedOutputStream:提供缓冲,从而提高读写效率。
    • ObjectInputStream和ObjectOutputStream:用于对象的序列化和反序列化。
  • 字符流的具体实现包括:
    • FileReader和FileWriter:用于读写文本文件。
    • BufferedReader和BufferedWriter、PrintWriter:提供字符缓冲,提高读写效率。
    • InputStreamReader和OutputStreamWriter:用于在字节流和字符流之间转换。

    • 这些类构成了Java IO流的层次结构,允许开发者根据不同的需求选择合适的流类型来进行数据的读写操作。

字节文件流应用

简介

文件流是用来连接我们的程序与文件之间的"管道",用来读写文件中的数据。

核心API

文件流是继承自InputStream和OutputStream的流对象,其分类为:

  • 文件输入流java.io.FileInputStream:读取文件数据的流
  • 文件输出流java.io.FileOutputStream:写入文件数据的流

文件输出流应用

java.io.FileOutputStream输出流对象用于向文件中写入数据,对象构建通常会借助如下两个构造方法:

FileOutputStream(String path)
创建文件输出流对指定的path路径表示的文件进行写操作,如果该文件不存在则将其创建出来

FileOutputStream(File file)
创建文件输出流对指定的file对象表示的文件进行写操作,如果该文件不存在则将其创建出来

案例

package io;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;//API(工具-用于解决什么问题,怎么解决问题)
public class FOSDemo01 {public static void main(String[] args) throws IOException {//1.构建一个文件输出流对象//1)创建文件对象File file=new File("jsd/2406/fos.dat");//jsd/2406/是目录//2)获取文件对象的目录结构File parent = file.getParentFile();//jsd/2406/System.out.println(parent);//3).假如目录不存在则创建目录mkdirs();if(!parent.exists()){//parent.exists()假如返回true表示存在parent.mkdirs();//创建多层目录System.out.println("文件不存在,创建成功");}//4)创建文件输出流对象(用于向文件写数据-二进制)//构建对象方法1//FileOutputStream fos1=new FileOutputStream("jsd/2406/fos.dat");//构建对象方法2FileOutputStream fos2=new FileOutputStream(file);//5)向文件中写入数据fos2.write(3);//这里的3表示10进制数据,3的二进制数据为 00000011//0001  1(10进制)//0010  2//0011  3//0100  4//0101  5fos2.write(4);fos2.write(5);System.out.println("数据写入OK");//6)释放资源(关闭流对象)fos2.close();}
}

文件输入流应用

java.io.FileInputStream文件输入流对象用于从文件中读取数据,常用构造方法有:

FileInputStream(String path)
基于给定的路径对应的文件创建文件输入流

FileInputStream(File file)
基于给定的File对象所表示的文件创建文件输入流

案例

package io;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;/*** 自己实践:* 构建文件输入流FileInputStream对象,并基于此对象* 从jsd/2406/fos.dat文件中读数据到程序中并输出。*/
public class FISDemo01 {public static void main(String[] args) throws IOException {//1.构建文件输入流对象FileInputStream fis=new FileInputStream("jsd/2406/fos.dat");//2.读取数据//int a = fis.read();//读取一个字节//int b = fis.read();//int c = fis.read();//int d = fis.read();//System.out.println("a="+a+";b="+b+";c="+c+";d="+d);int n=0;while((n=fis.read())!=-1){System.out.println(n);}//3.关闭流对象(水龙头有打开是不是也会有关闭,否则浪费资源)fis.close();//流对象关闭后会释放内存}
}

文件的复制实践

复制文件的原理就是使用文件输入流从原文件中陆续读取出每一个字节,然后再使用文件输出流将字节陆续写入到另一个文件中完成的。
案例1

package io;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;/*** 实现文件复制* 将当前目录中的a.png文件复制一份出来生成一个b.png文件*/public class FileCopyDemo01 {public static void main(String[] args) throws IOException {//一、实现思路//1.读文件内容(a.png)//2.将读取的内容写到b.png中//二、代码实现//1.构建文件输入流、输出流对象FileInputStream fis=new FileInputStream("a.png");//这个文件需要存在FileOutputStream fos=new FileOutputStream("b.png");//这个文件不存在会自动创建//2.读写数据(复制)int n=-1;while((n=fis.read())!=-1){//读取数据,n为读到的数据,-1表示读取到文件尾fos.write(n);//将读取的数据写入到b.png文件中}//3.关闭流对象fis.close();fos.close();}
}

块读写操作实践

  • 块读:一次性读取一组字节的方式
    InputStream中定义了块读的方法

int read(byte[] data)
一次性读取给定字节数组总长度的字节量并存入到该数组中。
返回值为实际读取到的字节数。如果返回值为-1表示本次没有读取到任何字节已经是流的末尾了

  • 块写:一次性写出一组字节的方式
    OutputStream中定义了块写的方法

void write(byte[] data)
一次性将给定数组中所有字节写出
void write(byte[] data,int offset,int len)
一次性将data数组中从下标offset处开始的连续len个字节一次性写出

案例实现:文件复制

package io;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;/*** 实现文件复制* 将当前目录中的a.png文件复制一份出来生成一个b.png文件*/
public class FileCopyDemo02 {public static void main(String[] args) throws IOException {//一、实现思路//1.读文件内容(a.png)//2.将读取的内容写到b.png中//二、代码实现//1.构建文件输入流、输出流对象FileInputStream fis=new FileInputStream("a.png");//这个文件需要存在FileOutputStream fos=new FileOutputStream("b.png");//这个文件不存在会自动创建//2.读写数据(复制)//2.1定义数组用于临时存储读取到数据byte[] data=new byte[1024];//这里数组的大小是自定义//2.2循环读取数据int length=-1;while((length=fis.read(data))!=-1){//这里数组大小是1024,所以最多一次读取1024个字节,length表示读取的字节数fos.write(data,0,length);//读了多少写多少,0表示起始位置,length表示写入的字节数}//3.关闭流对象fis.close();fos.close();}
}

文本数据操作

对于FileInputStream和FileOutputStream提供的方法只能读写字节数据,对于文本数据如何操作呢?
案例1:写文本数据

package io;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;/*** 文本数据的写操作实现*/
public class WriteStringDemo01 {public static void main(String[] args) throws IOException {String str = "我爱Java";//构建文件输出流对象FileOutputStream fos=new FileOutputStream("./f1.txt");//写字符数据byte[] data=str.getBytes(StandardCharsets.UTF_8);fos.write(data);str="Hello Tedu";fos.write(str.getBytes(StandardCharsets.UTF_8));//释放资源fos.close();}
}

案例2:读文本数据

package io;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class ReadStringDemo01 {public static void main(String[] args) throws IOException {//1.构建文件输入流对象//方式1:// File file=new File("./f1.txt");// long size=file.length();// FileInputStream fis=new FileInputStream(file);//方式2:FileInputStream fis=new FileInputStream("./f1.txt");//2.读取文件内容(将数据读取到字节数组中)//byte[] data=new byte[(int)size];byte[] data=new byte[fis.available()];//fis.available()获取流中有效字节数int len=fis.read(data);//3.将字节数组内容转换为字符串并输出String str=new String(data,0,len);System.out.println(str);//4.关闭流fis.close();}
}

字节缓冲流应用

处理流

概述
处理流是Java IO流体系中的一类重要的流,它们是在已经存在的流(称为基础流或节点流)之上构建的,为这些流添加额外的功能,而不改变原流本身。处理流的主要目的是为了增强或改变流的行为,比如提供缓冲、转换数据类型、序列化等等。
应用特征
处理流的典型特征是它们自身并不直接连接到物理的输入/输出设备,而是“装饰”在其他流之上,利用这些流进行数据的读写,并在此基础上提供附加服务。处理流的实例通常会把读写操作委托给底层的流,同时可能对数据进行一些预处理或后处理。

处理流可以串联使用,即一个处理流的输出可以作为另一个处理流的输入,形成流的链式结构。例如,可以先使用BufferedInputStream对FileInputStream进行包装,然后再用其它处理流包装这个缓冲流。

字节缓冲流

Java中的缓冲流是一种处理流,有java.io.BufferedInputStream和BufferedOutputStream其作用就是加快读写效率,通常缓冲流的应用最终要链接在低级流上。

  • 缓冲字节输出流
    BufferedOutputStream(OutputStream out)
    实例化一个缓冲字节输出流并链接在指定的字节输出流上。默认缓冲区大小8kb(内部维护的byte[] buf数组长度8192)
    BufferedOutputStream(OutputStream out,int size)
    实例化一个指定缓冲区大小的缓冲字节输出流并链接在指定的字节输出流上。
  • 缓冲字节输入流
    BufferedInputStream(InputStream in)
    实例化一个缓冲字节输入流并链接在指定的字节输入流上。默认缓冲区大小8kb(内部维护的byte[] buf数组长度8192)
    BufferedInputStream(InputStream in,int size)
    实例化一个指定缓冲区大小的缓冲字节输入流并链接在指定的字节输入流上。

应用案例分析

package io;import java.io.*;/*** 基于缓冲流实现文件复制*/
public class FileCopyDemo03 {public static void main(String[] args) throws IOException {//1.构建输入输出流对象(缓冲流增强文件流)BufferedInputStream bis =new BufferedInputStream(//处理流(这个流对象内置一个缓冲区-byte[])new FileInputStream("./a.png"));//节点流BufferedOutputStream bos =new BufferedOutputStream(//处理流new FileOutputStream("./c.png"));//节点流//2.读写数据(拷贝)byte[] data=new byte[16];int len;while ((len = bis.read(data)) != -1){bos.write(data,0,len);}bos.flush();//这里表示刷新缓冲区内容到文件//3.关闭流对象(关闭外层流时,内层流会自动关闭)bis.close();bos.close();}
}

对象流应用实践

简介

Java中的对象流也是一种处理流,有java.io.ObjectInputStream和java.io.ObjectOutputStream两个类型,用于实现对象的读写。也就是对象的序列化(把对象转化为字节)和反序列化(把字节转换为对象)。

  • ObjectOutputStream:用于将Java对象序列化为字节流,以便可以将对象写入文件、网络或其他任何形式的持久存储中。
  • ObjectInputStream:用于从字节流中反序列化Java对象,即将字节流重新转换为Java对象。

Serializable接口
为了能够被序列化,一个对象所属的类必须实现Serializable接口。Serializable是一个标记接口,不包含任何方法,它的存在仅仅是为了标识一个类是可序列化的。如果尝试序列化一个没有实现Serializable接口的类的对象,将会抛出NotSerializableException异常。

应用案例分析

设计一个Message对象类型

package io;import java.io.Serializable;/*** 消息对象*/
public class Message implements Serializable {//Serializable只起到一个标识性作用//添加序列化id(序列化时类中没有写序列化id,系统也会基于类中的属性和方法自动生成)//private static final long serialVersionUID=1L;//Idea自动生成序列化ID如何进行配置?可以在大模型中去搜索private static final long serialVersionUID = 8725255648785219540L;/*消息id*/private Integer id;/**消息标题,* 假如这个属性不希望系列化,* 可以使用transient关键字修饰*/private transient String title;/**消息内容*/private String content;//private Integer userId;//.....public Message() {}public Message(Integer id, String title, String content) {this.id=id;this.title=title;this.content=content;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}//alt+insert@Overridepublic String toString() {return "Message{" +"id=" + id +", title='" + title + '\'' +", content='" + content + '\'' +'}';}
}

对象序列化案例实现

package io;import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;/*** 对象流应用*/
public class ObjectOutputStreamDemo01 {public static void main(String[] args) throws IOException {Message m1 = new Message(1, "传奇老师病了",  "做了个小手术");//1.构建流对象ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream("message.txt"));//2.写对象(序列化)oos.writeObject(m1);System.out.println("序列化OK");//3.关闭流对象oos.close();}
}

对象反序列化案例实现

package io;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
/*** 将message.txt文件中的内容进行反序列化
*/
public class ObjectInputStreamDemo02 {public static void main(String[] args) throws IOException, ClassNotFoundException {//1.创建流对象ObjectInputStream ois=new ObjectInputStream(newFileInputStream("message.txt"));//2.读取对象(反序列化-先读出来的是字节,然后将字节转换对象)Message msg=(Message)ois.readObject();System.out.println(msg);//3.关闭资源ois.close();}
}

字符转换流应用

字符流

在Java中,字符流(Character Streams)是用于处理文本数据的一种流类型,其基类是java.io.Reader和java.io.Writer两个抽象类。
应用场景?
字符流广泛应用于读写文本文件,处理字符串,以及在网络通信中传输文本数据。由于文本文件通常包含人类可读的内容,字符流可以确保正确处理各种字符集和编码,从而避免乱码问题。
为什么使用字符流?

  • 编码透明性:字符流允许你指定字符编码,因此你可以读写使用不同编码的文本文件,而不需要了解具体的编码细节。
  • 字符边界处理:当处理多字节编码(如UTF-8)的字符时,字符流能确保每次读写的都是一个完整的字符,避免字节流中可能出现的字符截断问题(这里其实是乱码)

字符流超类

  • java.io.Writer 所有字符输入流的超类
    常用方法

void write(int c):写出一个字符,写出给定int值”低16”位表示的字符。
void write(char[] chs):将给定字符数组中所有字符写出。
void write(String str):将给定的字符串写出
void write(char[] chs,int offset,int len):将给定的字符数组中从offset处开始连续的len个字符写出

  • java.io.Reader 所有字符输出流的超类
    常用方法

int read():读取一个字符,返回的int值“低16”位有效。当返回值为-1时表达流读取到了末尾。
int read(char[] chs):从该流中读取一个字符数组的length个字符并存入该数组,返回值为实际读取到的字符量。当返回值为-1时表达流读取到了

字符转换流应用

在Java中,字符转换流是Java I/O体系中的一类流,它们实现了字节流和字符流之间的转换。这类流包括InputStreamReader和OutputStreamWriter两个核心类。*
InputStreamReader是一个读取字节并使用指定的字符集将其解码为字符的Reader;OutputStreamWriter则是一个接收字符并使用指定的字符集将其编码为字节的Writer。

应用场景

  • 当你需要从字节流中读取文本数据,并且想要控制使用的字符编码时。
  • 当你需要将字符数据写入到字节流中,并指定字符编码时。
  • 在网络通信中,当你发送或接收的数据是以字节形式存在,但你希望以字符形式处理时。

为什么用它?

  • 编码兼容性:不同的系统和文件可能使用不同的字符编码,字符转换流可以让你指定编码,从而正确解析或生成文本。
  • 国际化支持:为了支持多种语言和字符集,字符转换流提供了灵活的编码选择,这对于开发国际化应用非常重要。
  • 数据完整性:在处理多字节编码的字符时,字节流可能会导致字符被错误地分割,而字符转换流保证了字符的完整性和正确性。

应用案例分析和实践

  • OutputStreamWriter 应用案例(字符输出转化流应用)
    两个构造方法:

OutputStreamWriter(OutputStream out,Charset cs)
基于给定的字节输出流以及字符编码创建OSW

OutputStreamWriter(OutputStream out)
该构造方法会根据系统默认字符集创建OSW

具体应用:通过字符转换流将一些字符串写入到指定文件


package io;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;/*** 通过字符转换流将一些字符串写入到指定文件*/
public class OutputStreamWriterDemo01 {public static void main(String[] args) throws IOException {//1.构建字符转换输出流对象OutputStreamWriter osw =new OutputStreamWriter(new FileOutputStream("./osw.txt"),StandardCharsets.UTF_8);//2.写数据(字符串)osw.write("你好");//这里不会自动换行osw.write("子千老师");System.out.println("数据写出完毕");//3.关闭流对象osw.close();}
}
  • IntputStreamReader 应用案例(字符输入转化流应用)
    构造方法:

InputStreamWriter(InputStream in,Charset cs)
基于给定的字节输入流以及字符编码创建当前转换流

InputStreamWriter(InputStream in)
该构造方法会根据系统默认字符集创建当前转换流

具体应用案例:基于字符转换流从文件读取字符数据

package io;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;/*** 基于字符转换流从文件读取字符数据*/
public class InputStreamReaderDemo01 {public static void main(String[] args) throws IOException {//1.创建字符输入转换流对象InputStreamReader isr = new InputStreamReader(new FileInputStream("./osw.txt"), StandardCharsets.UTF_8);//2.读数据int data=0;while((data=isr.read())!=-1){System.out.print((char)data);}//3.关闭流对象isr.close();}
}

字符缓冲流应用

简介

在Java中,字符缓冲流是用于提高读写性能的一对流,它们包括BufferedReader和BufferedWriter。这些流通过内部缓存机制减少了对底层I/O设备的访问频率,从而提高了读写操作的效率。
在字符输出缓冲流应用时,通常会结合PrintWriter一起使用。这个对象可以一次写一行,并且可以自带刷新机制。

快速入门实现

案例1:PrintWriter 不同构造方法应用

package io;import java.io.*;/*** 打印流应用*/
public class PrintWriterDemo01 {public static void main(String[] args) throws FileNotFoundException {//1.构建PrintWriter对象//方式1:需要手动刷新缓冲区或者关闭流PrintWriter pw=new PrintWriter("./pw.txt");//方式2:自动刷新,构造方法中的true表示自动刷新//PrintWriter pw = new PrintWriter(//new FileOutputStream("./pw.txt"),true);//2.写入数据pw.println("hello");pw.println("world");pw.println("Java");//3.关闭流对象pw.close();}
}

案例2:自己指定缓冲流

package io;import java.io.*;public class PrintWriterDemo02 {public static void main(String[] args) throws FileNotFoundException {//1.构建打印流对象(装饰模式)PrintWriter printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream("./pw.txt"true))), true);//2.写数据printWriter.println("hello");printWriter.println("Java");//3.关闭流对象printWriter.close();}
}

案例3:字符输入缓冲流应用

package io;import java.io.*;
import java.nio.charset.StandardCharsets;/*** 编写一个程序,能从一个文件中读取数据,一次读取一行,并将读取的内容进行输出*/
public class BufferedReaderDemo01 {public static void main(String[] args) throws IOException {//1.构建BufferedReader对象BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("./src/main/java/io/FISDemo01.java"),StandardCharsets.UTF_8));//2.循环读取文件中数据,读一行,输出一行String line = null;while ((line = br.readLine()) != null) {//readLine用于读取一行System.out.println(line);}//3.关闭流对象br.close();}
}

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

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

相关文章

探索Python性能优化的神秘力量:Line Profiler

文章目录 探索Python性能优化的神秘力量:Line Profiler第一部分:背景第二部分:库简介第三部分:安装指南第四部分:基本使用方法第五部分:实际应用场景场景1:数据分析场景2:机器学习模…

qt-16可扩展对话框--隐藏和展现

可扩展对话框 知识点extension.hextension.cppmain.cpp运行图初始化隐藏展现--点击--详细按钮 知识点 MainLayout->setSizeConstraint(QLayout::SetFixedSize);//固定窗口大小 extension.h #ifndef EXTENSION_H #define EXTENSION_H#include <QDialog>class Extens…

腾讯2025校招不需要笔试了!速来投递!付内推

速报&#xff01;互联网扛把子腾讯 开放2025全球校招 想进鹅厂的同学请注意❗❗❗ 本次校招有重要流程变化 一起来看看今年鹅厂校招的三大重要变化。 1️⃣笔面流程变化&#xff1a;取消统一笔试 本次腾讯校招最重要的变化就是取消统一笔试&#xff08;在线测试未取消&am…

如何将图片上不需要的部分裁剪掉?裁剪图片的8种方法介绍

如何将图片上不需要的部分裁剪掉&#xff1f;在现代视觉媒体中&#xff0c;图片的质量和构图直接影响到信息传达的效果和观众的视觉体验。图片裁剪的目的是将图像的某些区域去除&#xff0c;从而专注于更重要的部分。这种处理方式常用于去除背景中的干扰元素、调整画面的比例、…

车牌号字符检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

车牌号字符检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着智能交通系统的快速发展&#xff0c;车牌号字…

开放式耳机音质好吗?2024热门耳机选购推荐!

开放式耳机的音质是否好&#xff0c;很大程度上取决于具体的产品型号和品牌&#xff0c;以及它们所采用的声学技术和驱动单元。根据搜索结果&#xff0c;市面上一些开放式耳机提供了不错的音质体验&#xff0c;尤其是在高音和中音方面表现出色&#xff0c;同时也有几款在低音方…

电梯节能 回馈装置

1、产品介绍 PFE系列电梯能量回馈装置是加拿大技术制造的电梯专用高性能回馈制动单元。 自2004年8月&#xff0c;近20年间&#xff0c;我们的产品历经六次重大设计改进、21次细节设计改进、105次微小技术改进&#xff0c;已经是第六代产品。 电梯变频回馈行业【优秀】水平&a…

Clipper2Lib的安装使用(新手友好)

Clipper2简介 Clipper2 库执行简单和复杂多边形的交集、并集、差集 和 异或 布尔操作&#xff0c;同时也执行多边形偏移。作者在十年前编写的原始 Clipper 库的重大更新版&#xff0c;现在称之为 Clipper1。尽管 Clipper1 仍然运行得很好&#xff0c;但 Clipper2 在各个方面都…

PC6402恒频DC-DC降压开关2A输出电流SOT23-5封装

PC6402是1.0MHz的恒定频率&#xff0c;电流模式降压转换器。这是理想的适用于要求非常高的便携式设备单电池锂离子电流高达2A电池&#xff0c;同时仍达到90%以上峰值负载条件下的效率。这个PC6402还可以以100%的占空比运行低压差运行&#xff0c;延长电池寿命轻载运行时的便携式…

拼车系统开发方案

一、项目背景 随着城市化进程的加快和私家车数量的激增&#xff0c;交通拥堵和环境污染问题日益严峻。拼车作为一种绿色、经济的出行方式&#xff0c;逐渐成为缓解这些问题的重要途径。开发一个高效、安全、便捷的拼车系统不仅有助于提升出行效率&#xff0c;还能减少交通拥堵…

昇腾AI BOX强势来袭,欧拉系统加持,定义边缘计算新标准!

随着CentOS官方宣布停止维护&#xff0c;用户在系统维护方面面临严峻挑战&#xff0c;急需稳定且兼容的替代方案。在国产化浪潮中&#xff0c;华为欧拉&#xff08;openEuler&#xff09;系统凭借其开放的社区模式与全球开发者共建的多元化软件生态&#xff0c;成为国内开发者的…

找了这么久的nicovideo视频下载方式,终于被我遇到啦

各位二次元的宝子们有福啦&#xff0c;看看我发现了什么宝贝&#xff0c;一个可以保存nicovideo视频的宝藏神器。还能选择需要的分辨率&#xff0c;下载的视频都超级清晰的。终于能实现在nicovideo保存视频自由啦&#xff0c;操作也是十分简单&#xff0c;我只看了一遍就学会了…

苹果手机黑屏打不开怎么办?几个小招定位和解决问题

苹果手机有时候会遇到一些让人头疼的问题&#xff0c;比如黑屏开不了机。这种情况可能是由多种原因造成的&#xff0c;有些是软件方面的&#xff0c;有些是硬件方面的。本文将为您介绍苹果黑屏开不了机的常见原因和解决方法&#xff0c;希望能够帮助您恢复您的手机正常使用。 一…

stm32—SPI

1. SPI 是什么 SPI (Serial Peripheral Interface)&#xff1a;是由美国摩托罗拉公司(Motorala)最先推出的一种同步全双工串行传输规范&#xff0c;也是一种单片机外设芯片串行扩展接口 SPI 接口主要应用在 EEPROM&#xff0c;FLASH&#xff0c;实时时钟&#xff0c; AD转换器&…

树莓派5 笔记26:ollama大型语言模型_中文输入法_Python_espeak文字转语音

今日继续学习树莓派5 8G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下&#xff1a; 下载大语言模型&#xff0c;下载中文输入法&#…

基于vue框架的比赛门票出售的系统12lh6(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,赛事类型,赛事信息,比赛队伍,比赛结果 开题报告内容 基于Vue框架的比赛门票出售系统开题报告 一、研究背景与意义 随着体育产业的蓬勃发展&#xff0c;各类体育赛事如雨后春笋般涌现&#xff0c;吸引了全球亿万观众的关注与参与…

【简历】25届西南某211JAVA简历:大厂面试官一看到DDD,肯定笑崩了

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 今天来看一份25届西南某大学211硕士的Java简历&#xff0c;学校这块就是一个正常的211&#xff0c;在大厂的话211和普通985&#xff0c;…

Java 3.1 - 计算机网络

目录 OSI 七层协议是什么&#xff1f;每一层的作用是什么&#xff1f; TCP / IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f; 应用层&#xff08;Application Layer&#xff09; 传输层&#xff08;Transport Layer&#xff09; 网络层&#xff08;Network …

探索数据结构:图(二)之图的遍历,Kruskal与Prim算法

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 图的遍历 图的遍历方式一般分为两种&#xff1a;深度优先遍历与广度…

XSS游戏

目录 XSS游戏-WarmupsMa Spaghet!JefffUgandan KnucklesRicardo MilosAh Thats HawtLigmaMafiaOk, BoomerWW3 XSS游戏-Warmups Ma Spaghet! 1. 尝试注入&#xff0c;输入aaaaaaaa 2. 显示在<h2>标签内3. 输入标签&#xff0c;添加onmouseover属性值为alert(1337)&…