IO流(二)

IO流(二)

目录

  1. IO流 —— 字符流
  2. IO流 —— 缓冲流
  3. IO流 —— 转换流
  4. IO流 —— 打印流
  5. IO流 —— 数据流
  6. IO流 —— 序列化流
1.IO流 —— 字符流
  • 文件字符输入流 —— 读字符数据进来
    • 字节流:适合复制文件等,不适合读写文本文件
    • 字符流:适合读写文本文件内容
FileReader(文件字符输入流)
  • 作用:以内存为基准,可以把文件中的数据以字符的形式,读入到内存中去
构造器说明
Public FileReader(File file)创建字符输入流管道与源文件接通
Public FileReader(String Pathname)创建字符输入流管道与源文件路径接通
方法名称说明
Public int read()每次读取一个字符返回,如果发现没有数据可读会返回-1
Public int read(char[] buffer)每次用一个字符数组去读取数据,返回字符数组读取了多少个字符,如果发现没有数据可读会返回-1
掌握文件字符输入流每次读取一个字符
/*** 目标:掌握文件字符输入流每次读取一个字符*/
public class FileReaderTest1 {public static void main(String[] args) {try (// 1、创建一个文件字符输入流管道与源文件接通Reader fr = new FileReader("src/ab.txt")) {// 2、读取文本文件的内容int c; // 记住每次读取的字符编号while((c = fr.read()) != -1) {System.out.print((char)c);}} catch (IOException e) {e.printStackTrace();}}
}
掌握文件字符输入流每次读取多个字符
/*** 目标:掌握文件字符输入流每次读取多个字符*/
public class FileReaderTest2 {public static void main(String[] args) {try (// 1、创建一个文件字符输入流管道与源文件接通Reader fr = new FileReader("src/ab.txt")) {// 2、每次读取多个字符char[] buffer = new char[3];int len; // 记住每次读取了多少个字符while((len = fr.read(buffer)) != -1) {System.out.print(new String(buffer,0,len));}} catch (IOException e) {e.printStackTrace();}}
}
文件字符输出流 (写字符数据出去)

作用:以内存为基准,把内存中的数据以字符的形式写出到文件中去

构造器说明
Public FileWriter(File file)创建字节输出流管道与源文件对象接通
Public FileWriter(String filePath)创建字节输出流管道与源文件路径接通
Public FileWriter(File file,boolean append)创建字节输出流管道与源文件对象接通,可追加数据
Public FileWriter(String filePath,boolean append)创建字节输出流管道与源文件路径接通,可追加数据
方法名称说明
void Writer(int c)写一个字符
void Writer(String str)写一个字符串
void Writer(String str,int off,int len)写一个字符串的一部分
void Writer(char[] cbuf)写一个字符数组
void Writer(char[] cbuf,int off,int len)写入字符数组的一部分
/*** 目标:掌握文件字符输出流:写字符数据出去*/
public class FileWriterTest2 {public static void main(String[] args) {try (// 创建一个文件字符输出流管道与目标文件接通// 覆盖管道
//				Writer fw = new FileWriter("src/out02.txt");// 追加数据的管道Writer fw = new FileWriter("src/out02.txt",true)) {// 1、public void write(int c) : 写一个字符出去fw.write('a');fw.write(97);fw.write('叶'); // 写一个字符出去fw.write("\r\n");// 2、public void write(String c) : 写一个字符串出去fw.write("我爱你中国abc");fw.write("\r\n");// 3、public void writer(String c,int pos,int len) : 写字符串的一部分出去fw.write("我爱你中国abc",0,5);fw.write("\r\n");// 4、public void write(char[] buffer) : 写一个字符数组出去char[] buffer = {'张','三','z','h','a','n','g'};fw.write(buffer);fw.write("\r\n");// 5、public void write(char[] buffer,int pos,int len) : 写字符数组的一部分出去fw.write(buffer,0,2);fw.write("\r\n");} catch (IOException e) {e.printStackTrace();}}
}
字符输出流使用时的注意事项

字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效

方法名称说明
Public void flush() throws IoException刷新流,就是将内存中缓存的数据立即写到文件中去生效
Public void close() throws IoException关闭流的操作,包含了刷新!
/*** 目标:搞清楚字符输出流使用时的注意事项*/
public class FileWriterTest3 {public static void main(String[] args) throws Exception {// 字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效Writer fw = new FileWriter("src/out03.txt");// 写字符数据出去fw.write('a');fw.write('b');fw.write('c');fw.write('d');fw.write("\r\n");fw.write("我爱你中国abc");fw.write("\r\n");//		fw.flush(); // 刷新流
//		fw.write("张三"); // 刷新流后还可以往文件写数据
//		fw.flush();fw.close(); // 关闭流,关闭流里面包含刷新操作}
}
字节流、字符流的使用场景小结
  • 字节流适合做一切文件数据的拷贝(音视频,文本)
  • 字节流不适合读取中文内容输出
  • 字符流适合做文本文件的操作(读、写)

2.IO流——缓冲流

  1. 字节缓冲流
  2. 字符缓冲流
  3. 原始流、缓冲流的性能分析

1

缓冲流的作用:对原始流进行包装,以提高原始流读写数据的性能

字节缓冲流的作用,提高字节流读写数据的性能

2

  • 原理:字节缓冲输入流自带8KB缓冲池,字节缓冲输出流也自带了8KB缓冲池
构造器说明
Public BufferedInputStream(InputStream is)把低级的字节输入流包装成一个高级的缓冲字节输入流,从而提高读取数据的性能
Public BufferedOutputStream(OutputStream os)把低级的字节输出流包装成一个高级的缓冲字节输出流,从而提高写数据的性能
/*** 目标:掌握字节缓冲流的作用*/
public class BufferedInputStreamTest1 {public static void main(String[] args){		try(InputStream is = new FileInputStream("‪D:/reSource/logo.png");// 1、定义一个字节缓冲输入流包装原始的字节输入流InputStream bis = new BufferedInputStream(is);OutputStream os = new FileOutputStream("C:/data/logo.png");// 2、定义一个字节缓冲输出流包换原始的字节输出流OutputStream bos = new BufferedOutputStream(os);){byte[] buffer = new byte[1024]; // 1KBint len; while ((len = bis.read(buffer)) != -1) {bos.write(buffer, 0, len);}System.out.println("复制完成");} catch (Exception e) {e.printStackTrace();} }
}
BufferedReader(字符缓冲输入流)
  • 作用:自带8KB(8192字节)的字符缓冲池,可以提高字符输入流读取数据的性能
构造器说明
Public BufferedReader(Reader r)把低级的字符输入流包装成字符缓冲输入流管道
  • 字符缓冲输入流新增的功能:按照行读取字符
方法说明
Public String readLine()读取一行数据返回,如果没有数据可读了,会返回null
/*** 目标:掌握字符缓冲输入流的用法*/
public class BufferedReaderTest2 {public static void main(String[] args) {try (Reader fr = new FileReader("src/ab.txt");// 创建一个字符缓冲输入流包装原始的字符输入流BufferedReader br = new BufferedReader(fr);) {//			char[] buffer = new char[3];
//			int len;
//			while((len = fr.read(buffer)) != -1) {
//				System.out.print(new String(buffer,0,len));
//			}String line; // 记住每次读取的一行数据while((line = br.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
}
BufferedWriter(字符缓冲输出流)
  • 作用:自带8KB(8192字节)的字符缓冲池,可以提高字符输出流写字符数据的性能
构造器说明
Public BufferedWriter(Writer r)把低级的字符输出流包装成一个高级的缓冲字符输出流管道,从而提高字符输出流写数据的性能
  • 字符缓冲输出流新增的功能:换行
方法说明
Public void newLine()换行
public class BufferedWriterTest3 {public static void main(String[] args) {try (Writer fw = new FileWriter("src/out02.txt",true);// 创建一个字符缓冲输出流管道包装原始的字符输出流BufferedWriter bw = new BufferedWriter(fw);) {// 1、public void write(int c) : 写一个字符出去bw.write('a');bw.write(97);bw.write('叶'); // 写一个字符出去
//			fw.write("\r\n");bw.newLine();// 2、public void write(String c) : 写一个字符串出去bw.write("我爱你中国abc");
//			bw.write("\r\n");bw.newLine();} catch (IOException e) {e.printStackTrace();}}
}
案例:拷贝静夜思到另一个文件,恢复顺序
  1. 定义一个缓冲字符输入流管道与源文件接通
  2. 定义一个List集合存储读取的每行数据
  3. 定义一个循环按照行读取数据,存入到List集合中去
  4. 对List集合中的每行数据按照首字母编号升序排序
  5. 定义一个缓冲字符输出流管道与目标文件接通
  6. 遍历List集合中的每个元素,用缓冲字符输出管道写出来并换行
/*** 案例:拷贝静夜思到另一个文件,恢复顺序*/
public class Test4 {public static void main(String[] args) {try(// 1、定义一个缓冲字符输入流管道与源文件接通BufferedReader br = new BufferedReader(new FileReader("src/sort.txt"));// 5、创建一个缓冲字符输出流管道与目标文件接通BufferedWriter bw = new BufferedWriter(new FileWriter("src/Newsort.txt"));) {// 2、定义一个List集合存储读取的每一行ArrayList<String> data = new ArrayList<String>();// 3、按照行读取每段数据String line; // 记录读取的当前行while((line = br.readLine()) != null) {data.add(line);}// 4、对ArrayList集合中的每段进行排序,默认按照每段首字母编号排序Collections.sort(data);// 6、遍历List集合的每段内容,依次写出到新文件中for(String ln : data) {bw.write(ln); // 输出遍历的当前段落bw.newLine(); // 换行}} catch (Exception e) {e.printStackTrace();}}
}
原始流、缓冲流的性能分析

测试用例:

  • 分别使用原始的字节流,以及字节缓冲流,赋值一个很大的视频文件

测试步骤:

  1. 使用低级的字节流按照一个一个字节的形式去复制文件
  2. 使用低级的字节流按照字节数组的形式复制文件
  3. 使用高级的缓冲字节流按照一个一个字节的形式复制文件
  4. 使用高级的缓冲字节流按照字节数组的形式复制文件
/*** 目标:观察原始流和缓冲流的性能*/
public class TimeTest4 {// 复制视频的路径private final static String SRC_FILE = "src/File1";// 复制到哪个目的地private final static String DEST_FILR = "D:\\";public static void main(String[] args) {
//		copy01(); // 低级字节流一个一个字节的形式复制,非常慢,直接淘汰copy02(); // 低级字节流按照一个一个字节数组的形式复制,速度较慢copy03(); // 缓冲流按照一个一个字节的形式的复制,速度较慢copy04(); // 缓冲流按照一个一个字节数组的形式复制,速度极快,推荐使用!}private static void copy01() {long startTime = System.currentTimeMillis();try(InputStream is = new FileInputStream(SRC_FILE);OutputStream os = new FileOutputStream(DEST_FILR + "1.avi");) {int b;while((b = is.read()) != -1) {os.write(b);}} catch (Exception e) {e.printStackTrace();}long endTime = System.currentTimeMillis();System.out.println("低级字节流一个一个字节复制耗时:" + (endTime - startTime) / 1000.0 + "s");}private static void copy02() {long startTime = System.currentTimeMillis();try(InputStream is = new FileInputStream(SRC_FILE);OutputStream os = new FileOutputStream(DEST_FILR + "2.avi");) {byte[] buffer = new byte[1024]; // 1KBint len;while((len = is.read(buffer)) != -1) {os.write(buffer,0,len);}} catch (Exception e) {e.printStackTrace();}long endTime = System.currentTimeMillis();System.out.println("低级字节流使用字节数组复制耗时:" + (endTime - startTime) / 1000.0 + "s");}private static void copy03() {long startTime = System.currentTimeMillis();try(InputStream is = new FileInputStream(SRC_FILE);BufferedInputStream bis = new BufferedInputStream(is); OutputStream os = new FileOutputStream(DEST_FILR + "3.avi");BufferedOutputStream bos = new BufferedOutputStream(os);) {int b;while((b = bis.read()) != -1) {bos.write(b);}} catch (Exception e) {e.printStackTrace();}long endTime = System.currentTimeMillis();System.out.println("缓冲流一个一个字节复制耗时:" + (endTime - startTime) / 1000.0 + "s");}private static void copy04() {long startTime = System.currentTimeMillis();try(InputStream is = new FileInputStream(SRC_FILE);BufferedInputStream bis = new BufferedInputStream(is); OutputStream os = new FileOutputStream(DEST_FILR + "4.avi");BufferedOutputStream bos = new BufferedOutputStream(os);) {byte[] buffer = new byte[1024]; // 1KBint len;while((len = bis.read(buffer)) != -1) {bos.write(buffer,0,len);}} catch (Exception e) {e.printStackTrace();}long endTime = System.currentTimeMillis();System.out.println("缓冲流使用字节数组复制耗时:" + (endTime - startTime) / 1000.0 + "s");	}
}

3.IO——转换流

  • 引出问题:不同编码读取时会乱码
  • 字符输入转换流
  • 字符输出抓换流
不同编码读取出现乱码的问题
  • 如果代码编码和被读取的文本文件的编码是一致的,使用字符流读取文本文件时不会出现乱码!
  • 如果代码编码和被读取的文本文件的编码是不一致的,使用字符流读取文本文件时就会出现乱码!
/*** 目标:掌握不同编码读取乱码的问题*/
public class Test1 {public static void main(String[] args) {try(// 1、创建一个文件字符输入流与源文件接通// 代码编码:UTF-8 文件的编码:UTF-8Reader fr = new FileReader("src/File1");//				// 代码编码:UTF-8 文件的编码:GBK
//				Reader fr = new FileReader("src/File1"); // 乱码// 2、把文件字符输入流包装成缓冲字符输入流BufferedReader br = new BufferedReader(fr);){String line;while((line = br.readLine()) != null) {System.out.println(line);}} catch (Exception e) {e.printStackTrace();}}
}

3

InputStreamReader(字符输入转换流)
  • 解决不同编码时,字符流读取文本内容乱码的问题
  • 解决思路:先获取文件的原始字节流,再将其按真实的字符集编码转成字符输入流,这样字符输入流中的字符就不乱码了
构造器说明
Public InputStreamReader(InputStream is)把原始的字节输入流,按照代码默认编码转成字符输入流(与直接使用FileReader的效果一样)
Public InputStreamReader(InputStream is,String charset)把原始的字节输入流,按照指定字符集编码成字符输入流(重点)
/*** 目标:掌握字符输入转换流的作用*/
public class InputStreamReaderTest2 {public static void main(String[] args) {try(// 1、得到文件的原始字节流(GBK的字节流形式)InputStream is = new FileInputStream("src/File2");// 2、把原始的字节输入流按照指定的字符集编码转换成字符输入z转换流Reader isr = new InputStreamReader(is, "GBK");// 3、把字符输入流包装成缓冲字符输入流BufferedReader br = new BufferedReader(isr);) {String line;while((line = br.readLine()) != null) {System.out.println(line);}} catch (Exception e) {e.printStackTrace();}}
}
需要控制写出去的字符使用什么字符编码,该咋整?
  1. 调用String提供的getBytes方法解决、
    • String data = “我爱你中国abc”;
    • byte[] bytes = data.getBytes(“GBK”);
  2. OutputStreamWriter 字符输出转换流
    • 作用:可以控制写出去的字符使用什么字符集编码
    • 解决思路:获取字节输出流,再按照指定的字符集编码将其转换成字符输出流,以后写出去的字符就会用该字符编码了
构造器说明
Public OutputStreamWriter(OutputStream os)可以把原始的字节输出流,按照代码默认编码转换成字符输出流
Public OutputStreamWriter(OutputStream os,String charset)可以把原始的字节输出流,按照指定的编码转换成字符输出流(重点)
/*** 目标:掌握字符输出转换流的使用*/
public class OutputStreamWriterTest3 {public static void main(String[] args) {try(// 1、创建一个文件字节输出流OutputStream os = new FileOutputStream("src/File3.txt");// 2、把原始的字节输出流按照指定的字符集编码转换成字符输出流Writer osw = new OutputStreamWriter(os,"GBK");// 3、把字符输出流包装成缓冲字符输出流BufferedWriter bw = new BufferedWriter(osw);) {bw.write("我爱你中国ABC");bw.write("我是中国人abc");} catch (Exception e) {e.printStackTrace();}}
}

4.IO——打印流

4

PrintStream / PrintWriter(打印流)
  • 作用:打印流可以实现更方便,更高效的打印数据出去,能实现打印啥出去就是啥出去
PrintStream提供的打印数据的方案
构造器说明
Public PrintStream(OutputStream out / File / String)打印流直接通向字节输出流对象 / 文件 / 文件路径
Public PrintStream(String fileName,Charset charset)可以指定写出去的字符编码
Public printStream(OutputStream out,boolean autoFlush)可以指定实现自动刷新
Public printStream(OutputStream out,boolean autoFlush,String encoding)可以指定实现自动刷新,并可指定字符的编码
方法说明
Public void print(Xxx xxx)打印任意类型的数据出去
Public void Writer(int / byte[] / byte[] 一部分)可以支持写一个字节 / 一个字节数组 / 一个字节数组的一部分 出去
/*** 目标:掌握打印流:PrintStream / PrintWriter的用法*/
import java.io.PrintStream;
import java.nio.charset.Charset;public class PrintTest1 {public static void main(String[] args) {try(// 创建一个打印流管道
//				PrintStream ps =
//					new PrintStream("src/File3.txt",Charset.forName("GBK")); // 指定写出去的数据是"GBK"编码PrintStream ps =new PrintStream("src/File3.txt");) {ps.println(97); // 97ps.println('a'); // 'a'ps.println("张三"); // "张三"ps.println(true); // trueps.println(99.9); // 99.9ps.write(97); // 'a'} catch (Exception e) {e.printStackTrace();}}
}
PrintWriter提供的打印数据的方案
构造器说明
Public printWriter(OutputStream out / Writer / File / String)打印流直接通向 字节输出流 / 字符输出流 / 文件 / 文件路径
Public printWriter(String filename,Charset charset)可以指定写出去的字符编码
Public printWriter(OutputStream out,boolean autoFlush,String encoding)可以指定实现自动刷新,并可指定字符的编码
public class PrintWriterTest2 {public static void main(String[] args) {try(// 创建一个打印流管道
//				PrintWriter ps =
//				new PrintWriter("src/File4.txt");// 创建一个打印流的追加管道PrintWriter ps =new PrintWriter(new FileOutputStream("src/File4.txt",true));) {ps.println(97);ps.println('a');ps.println("张三");ps.println(true);ps.println(99.9);//			ps.write(97); // 'a'} catch (Exception e) {e.printStackTrace();}}
}
PrintStream 和 PrintWriter 的区别
  • 打印数据的功能是一模一样的,都是使用方便,性能高效
  • PrintStream继承字节输出流OutputStream,因此支持写字节数据的方法
  • PrintWriter继承自字符输出流Writer,因此支持写字符数据的方法
打印流的一种应用:输出语句的重定向
  • 可以把输出语句的打印位置改到某个文件中去
  • PrintStream ps = new PrintStream(“文件地址”); Sysout.setout(ps);
/*** 目标:了解输出语句的重定向*/
public class Test3 {public static void main(String[] args) {System.out.println("床前明月光"); // 输出到控制台System.out.println("疑是地上霜"); // 输出到控制台try(PrintStream ps = new PrintStream("src/File5.txt");){// 把系统默认的打印流对象改成自己设置的打印流System.setOut(ps);System.out.println("举头望明月"); // 输出到指定的文件System.out.println("低头思故乡"); // 输出到指定的文件	} catch (Exception e) {e.printStackTrace();}}
}

5.IO流——数据流

6

DataOutputStream(数据输出流)
  • 允许把数据和其数据类型一并写出去
构造器说明
Public DataOutputStream(OutputStream out)创建新数据输出流包装基础的字节输出流
方法说明
Public final void writeByte(int V) throws IoException将byte类型的数据写入基础的字节输出流
Public final void writeInt(int V) throws IoException将int类型的数据写入基础的字节输出流
Public final void writeDouble(double V) throws IoException将double类型的数据写入基础的字节输出流
Public final void writeUTF(String str) throws IoException将字符串数据以 UTF-8 编码成字节写入基础的字节输出流
Public final void write(int / byte[] / byte[] 一部分)支持写一个字节 / 一个字节数组 / 一个字节数组的一部分出去
/*** 目标:数据输出流*/
public class DataOutputStreamTest1 {public static void main(String[] args) {try(// 1、创建一个数据输出流包装低级的字节输出流DataOutputStream dos = new DataOutputStream(new FileOutputStream("src/File6out.txt"));) {dos.writeInt(97);dos.writeDouble(99.9);dos.writeBoolean(true);dos.writeUTF("张三666");} catch (Exception e) {e.printStackTrace();}	}		
}
DataInputStream(数据输入流)
  • 用于读取数据输出流写出去的数据
构造器说明
Public DataInputStream(InputStream is)创建新数据输入流包装基础的字节输入流
方法说明
Public final byte readByte() throws IoException读取字节数据返回
Public final int readInt() throws IoException读取int类型的数据返回
Public final double readDouble() throws IoException读取double类型的数据返回
Public final String readUTF() throws IoException读取字符串数据(UTF-8)返回
Public int readInt() / read(byte[])支持读取字节数据进来
/*** 目标:使用数据输入流读取特定类型的数据*/
public class DataInputStreamTest2 {public static void main(String[] args) {try(// 1、创建一个数据输入流包装一个低级字节输入流DataInputStream dis =new DataInputStream(new FileInputStream("src/File6out.txt"));) {int i = dis.readInt();System.out.println(i);double d = dis.readDouble();System.out.println(d);boolean b = dis.readBoolean();System.out.println(b);String rs = dis.readUTF();System.out.println(rs);} catch (Exception e) {}}
}

6.IO流——序列化流

  • 对象序列化:把java对象写入到文件中去
  • 对象反序列化:把文件里的java对象读出来

6

ObjectOutputsream(对象字节输出流)
  • 可以把java对象进行序列化:把java对象存入到文件中去
构造器说明
Public ObjectOutputStream(OutputStream out)创建对象字节输出流,包装基础的字节输出流
方法说明
Public final void writeObject(object o) throws IoException把对象写出去
/*** 目标:掌握对象字节输出流的使用:序列化对象*/
public class ObjectOutputStreamTest1 {public static void main(String[] args) {try(// 2、创建一个对象字节输出流 包装原始的字节输出流ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src/File7out.txt"));) {// 1、创建一个java对象User u =new User("admin","张三",19,"123456");// 3、序列化对象到文件中去oos.writeObject(u);System.out.println("序列化对象成功!");} catch (Exception e) {e.printStackTrace();}}
}

注意:对象如果要参与序列化,必须要实现序列化接口 (java.io.serializable)

ObjectInputStream(对象字节输入流)
  • 可以把java对象进行反序列化,把存储在文件中的java对象读入到内存中来
构造器说明
Public object InputStream(InputStream is)创建对象字节输入流,包装基础的字节输入流
方法说明
Public final object readObject()把存储在文件中的java对象读出来
/*** 目标:掌握对象字节输入流的使用:反序列化对象*/
public class objectInputStreamTest2 {public static void main(String[] args) {try(// 1、创建一个对象字节的输入流管道,包装低级的字节输入流与源文件接通ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src/File7out.txt"));){User u = (User)ois.readObject();System.out.println(u);} catch (Exception e) {e.printStackTrace();}}
}
如果一次序列化多个对象,怎么弄?
  • 用一个ArrayList集合存储多个对象,然后直接对集合进行序列化
  • 注意:ArrayList集合已经实现了序列化接口(Serializable)
/*** 目标:掌握对象字节输出流的使用:序列化多个对象*/
public class ObjectOutputStreamTest2 {public static void main(String[] args) {try(// 2、创建一个对象字节输出流 包装原始的字节输出流ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src/File8out.txt"));) {// 1、创建多个java对象User u1 =new User("zhangsan","张三",19,"123456");User u2 =new User("lisi","李四",22,"123888");User u3 =new User("wangwu","王五",19,"123666");// 3、创建一个ArrayList集合存储多个对象 (ArrayList集合内部已经实现了序列化接口)ArrayList<User> data = new ArrayList<User>();data.add(u1);data.add(u2);data.add(u3);// 4、序列化对象到文件中去oos.writeObject(data);System.out.println("序列化对象成功!");} catch (Exception e) {e.printStackTrace();}}
}

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

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

相关文章

哪个充电宝牌子好用又实惠?盘点四大平价充电宝分享

在当今快节奏的生活中&#xff0c;充电宝已成为我们日常生活中不可或缺的一部分。然而&#xff0c;面对市场上琳琅满目的充电宝品牌和型号&#xff0c;许多消费者误以为选择容量越大、价格越高的充电宝就是最好的选择。实际上&#xff0c;买充电宝并不是一味追求高容量和高价格…

在有限的分数有限下如何抉择?是选好专业还是选好学校

随着2024年高考的落幕&#xff0c;无数考生和家长站在了人生的重要十字路口。面对成绩单上的数字&#xff0c;一个难题摆在了面前&#xff1a;在分数限制下我们该如何平衡“心仪的专业”与“知名度更高的学校”之间的选择&#xff1f; 一、专业决定未来职业走向 选择一个好的专…

简易版 | 代码生成器(包含插件)

一、代码生成器 先导入依赖 <!-- Mybatis-Plus --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.6</version> </dependency><!-- 代码生成器 --…

Navicat和SQLynx产品功能比较二(SQL查询)

数据库管理工具最常用的功能就是SQL的查询&#xff0c;没有之一。本文针对Navicat和SQLynx做了SQL查询相关的性能测试&#xff0c;从测试结果来看&#xff0c;Navicat主要适合开发类的小型数据量需求&#xff0c;SQLynx可以适应大型数据量或小型数据量的需求&#xff0c;用户可…

基于51单片机的脉搏测量仪—心率计

基于51单片机的脉搏测量仪 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 本系统由STC89C51/52单片机LCD1602显示模块5mm红外接收管LM358运放电路按键模块等构成 1.手指放到红外对管中&#xff0c;2…

【Python】Redis数据库

Redis数据库 Unit01一、Redis1.1 概述1.2 安装1.3 Redis-cli1.4 数据类型1.5 字符处理1.6 键的命名规则 二、通用命令三、字符串(String)3.1 概述3.2 常用命令3.3 应用场景 四、列表(List)4.1 概述4.2 常用命令 五、集合(SET)5.1 概述5.3 常用命令 六、有序集合6.1 概述6.2 常用…

SyntaxError: EOL while scanning string literal

背景&#xff1a; 在对字符串使用in关系运算符时&#xff0c;报错SyntaxError: EOL while scanning string literal 原因&#xff1a; 这是因为${var}中有换行符\n导致的&#xff0c;通过Log ${var}可以看出换行符确实导致的字符串hello的引号位于两行&#xff0c;从而导致…

Spring Cloud 专题-前言篇(1)

引言 随着微服务架构的兴起&#xff0c;Spring Cloud 作为一套基于 Spring Boot 实现的云应用开发工具集&#xff0c;为开发者提供了在分布式系统&#xff08;如配置管理、服务发现、断路器、智能路由、微代理、控制总线等&#xff09;中快速构建一些常见模式的能力。本篇文档…

深度神经网络——什么是NLP(自然语言处理)?

自然语言处理&#xff08;NLP&#xff09; 是对使计算机能够处理、分析、解释和推理人类语言的技术和工具的研究和应用。 NLP 是一个跨学科领域&#xff0c;它结合了语言学和计算机科学等领域已建立的技术。 这些技术与人工智能结合使用来创建聊天机器人和数字助理&#xff0c;…

线性二次型调节器(LQR)举例

线性二次型调节器(LQR) 线性二次型调节器(LQR)是一种用于最优控制的问题,其中目标是通过最小化某个代价函数来找到最优控制策略。LQR特别适用于线性系统。为了在人形机器人上应用LQR进行建模,主要步骤包括建立系统模型、定义代价函数以及求解最优控制律。以下是详细步骤…

基于java《场馆预约MeetHere》【完整代码】和【完整测试流程报告】的资源

基于java《场馆预约MeetHere》【完整代码】和【完整测试流程报告】的资源 项目描述 MeetHere是一个场馆预约和管理的Web商务网站 普通用户&#xff1a;注册、登录、个人信息管理、查看场馆介绍和预约信息、场馆预约、场馆预约订单管理、查看新闻、留言管理&#xff08;发布、浏…

Day 25:1807. 替换字符串中的括号内容

Leetcode 1807. 替换字符串中的括号内容 给你一个字符串 s &#xff0c;它包含一些括号对&#xff0c;每个括号中包含一个 非空 的键。 比方说&#xff0c;字符串 “(name)is(age)yearsold” 中&#xff0c;有 两个 括号对&#xff0c;分别包含键 “name” 和 “age” 。 你知道…

【YOLO模型训练时,减小批次大小(Batch Size)可能会加快训练速度】

文章目录 1.在使用YOLOv8进行目标检测模型训练时&#xff0c;减小批次大小&#xff08;Batch Size&#xff09;可能会加快训练速度。2. 这种现象主要与以下几个因素有关&#xff1a;1.显存限制&#xff08;GPU Memory Constraints&#xff09;&#xff1a;2.梯度累积&#xff0…

参数搜索流形学习

目录 一、网格搜索1、介绍2、代码示例 二、HalvingGridSearch1、介绍2、代码示例 三、随机搜索1、介绍2、代码示例 三、贝叶斯搜索1、介绍2、代码示例 四、参数搜索总结五、流形学习1、LLE1、介绍2、官方代码示例 2、t-SNE1、介绍2、官方代码示例 一、网格搜索 1、介绍 网格搜…

BKP备份寄存器RTC实时时钟

BKP备份寄存器&RTC实时时钟 VDDA和VSSA是内部模拟部分的电路 VDD和VSS_1、2、3是内部数字电路的供电。系统以VDD开头的电源都是主电源。在正常使用STM32时&#xff0c;全部需要接到3.3v电源上。 VBAT备用电池供电引脚&#xff0c;如使用STM32内部的BKP和RTC&#xff0c;引…

SpringBoot修改banner

在resources目录下创建banner.txt文件 到该网站下选择banner https://www.bootschool.net/ascii-art 点击拷贝&#xff1a; 粘贴到banner.txt中&#xff0c;保存 重新运行项目即可&#xff1a;

JavaScript Window对象之(BOM、JS 执行机制、location对象、navigator对象、histroy对象、本地存储)

目录 1. BOM(浏览器对象模型)2. JS 执行机制3. location对象4. navigator对象5. histroy对象6. 本地存储6.1 localStorage6.2 sessionStorage 1. BOM(浏览器对象模型) BOM(Browser Object Model)是浏览器对象模型。其中window对象是JavaScript中一个全局的顶级对象基本的BOM属性…

MAC M1系统编译ffmpeg-gl-transition

MAC M1系统编译ffmpeg-gl-transition 1. 本人系统2. 编译&#x1f4b0;系统准备2.1. 下载【ffmpeg-gl-transition】到用户家目录下&#xff0c;并解压2.2 下载ffmpeg源码2.3. brew安装GLEW glfw32.4 复制vf_gltransition.c文件到ffmpeg2.5 修改ffmpeg源码文件2.6 设置库目录和…

SpringBoot购物网站

摘要 随着信息技术的高速发展&#xff0c;二十一世纪的网络技术和网络应用正在快速融入人们的生活&#xff0c;并且由于网络服务以及网络应用日渐普及&#xff0c;人们对于现在生活的需求也随之增长&#xff0c;而网上购物的便捷对人们的吸引力越来越大&#xff0c;购物网站可…

Redis 5种常用数据类型

目录 Redis简介 1.字符串 string 2.哈希 hash 3.列表 list 4.集合 set 5.有序集合 sorted set / zset Redis简介 Redis&#xff0c;全称Remote Dictionary Server&#xff0c;是一个开源的、内存中的数据结构存储系统。它可以用作数据库、缓存和消息中间件&#xff0c;支…