Java学习总结-IO流的概念理解

2023-11-02

一、Java io流 的概念

流存在的意义:

1. 数据的传输量很大

2. 内存有限

3. 带宽有限

而Stream可以1点1点地逐步传输所有数据, 这就是Stream存在的根本意义。想想我们是怎样下载1个大文件的, 下载软件(例如x雷)并不会占用你内存很大的空间, 而只是在内存划分1个缓冲区, 一点一点地下载到自己的内存(缓冲区满了再写到硬盘), 这也是流的1个例子。

1、java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许java程序使用相同的方式来访问不同的输入/输出源。stram是从起源(source)到接收的(sink)的有序数据。

2、Stream是java的1个类, 这个类专门用于程序和外部设备的输入输出(IO). 基本上所有流都在 java.io这个包中.

实际上Stream就是数据在程序和外部设备的单向管道, 流的各种方法相当于管道上的各种按钮.  

所谓的外部设备可以包括硬盘文件, 网络设备, 另个程序等. 也就是当前程序之外的数据设备

Java将所有传统的流类型都放在Java.io包下,用于实现输入和输出功能。

二、io 流的分类

按照流的不同的分类方式,可以把流分为不同的类型,流常见的分类有3种:

1、按照流的流向分:输入流和输出流

  • 输入流: 只能从中读取数据,而不能向其写入数据。
  • 输出流:只能向其写入数据,而不能向其读取数据。

此处的输入,输出涉及一个方向的问题,对于如图15.1所示的数据流向,数据从内存到硬盘,通常称为输出流——也就是说,这里的输入,输出都是从程序运行所在的内存的角度来划分的。

注:java的输入流主要是InputStream和Reader作为基类,而输出流则是主要由outputStream和Writer作为基类。它们都是一些抽象基类,无法直接创建实例。

2、按照操作单元划分,可以划分为字节流和字符流。

    字节流和字符流的用法几乎完成全一样,区别在于字节流和字符流所操作的数据单元不同,字节流操作的单元是数据单元是8位的字节,字符流操作的是数据单元为16位的字符。

字节流主要是由InputStream和outPutStream作为基类,而字符流则主要有Reader和Writer作为基类。

3、按照流的角色划分为节点流和处理流。

    可以从/向一个特定的IO设备(如磁盘,网络)读/写数据的流,称为节点流。节点流也被称为低级流。图15.3显示了节点流的示意图。 
    从图15.3中可以看出,当使用节点流进行输入和输出时,程序直接连接到实际的数据源,和实际的输入/输出节点连接。 
处理流则用于对一个已存在的流进行连接和封装,通过封装后的流来实现数据的读/写功能。处理流也被称为高级流。

节点流:

节点流的类型:

 1)File 文件流。对文件进行读、写操作 :FileReader、FileWriter、FileInputStream、FileOutputStream。、
(2)Memory 
1)从/向内存数组读写数据: CharArrayReader与 CharArrayWriter、ByteArrayInputStream与ByteArrayOutputStream。 
2)从/向内存字符串读写数据 StringReader、StringWriter、StringBufferInputStream。
(3)Pipe管道流。 实现管道的输入和输出(进程间通信): PipedReader与PipedWriter、PipedInputStream与PipedOutputStream

节点流执行图示:

 

 处理流:

处理流的类型:

 (1)Buffering缓冲流:在读入或写出时,对数据进行缓存,以减少I/O的次数:BufferedReader与BufferedWriter、BufferedInputStream与BufferedOutputStream。 
- (2)Filtering 滤流:在数据进行读或写时进行过滤:FilterReader与FilterWriter、FilterInputStream与FilterOutputStream。 
- (3)Converting between Bytes and Characters 转换流:按照一定的编码/解码标准将字节流转换为字符流,或进行反向转换(Stream到Reader):InputStreamReader、OutputStreamWriter。 
- (4)Object Serialization 对象流 :ObjectInputStream、ObjectOutputStream。 
- (5)DataConversion数据流: 按基本数据类型读、写(处理的数据是Java的基本类型(如布尔型,字节,整数和浮点数)):DataInputStream、DataOutputStream 。 
- (6)Counting计数流: 在读入数据时对行记数 :LineNumberReader、LineNumberInputStream。 
- (7)Peeking Ahead预读流: 通过缓存机制,进行预读 :PushbackReader、PushbackInputStream。 
- (8)Printing打印流: 包含方便的打印方法 :PrintWriter、PrintStream。
 

处理流的执行图示:

 

缓冲流(buffering)是处理流的一种,对I/O进行缓冲是一种常见的性能优化,缓冲流为I/O流增加了内存缓冲区,增加缓冲区的两个目的: 
(1)允许Java的I/O一次不只操作一个字符,这样提高䇖整个系统的性能; 
(2)由于有缓冲区,使得在流上执行skip、mark和reset方法都成为可能。

【2】缓冲流:它是要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能, 
提高了读写的效率,同时增加了一些新的方法。例如:BufferedReader中的readLine方法, 
BufferedWriter中的newLine方法。

j2sdk提供了4种缓冲流,重用的构造方法如下:

//字符输入流
BufferedReader(Reader in)//创建一个32字节的缓冲区
BufferedReader(Reader in, int size)//size为自定义缓存区的大小

//字符输出流
BufferedWriter(Writer out)
BufferedWriter(Writer out, int size)

//字节输入流
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in, int size)

//字节输出流
BufferedOutputStream(OutputStream in)
BufferedOutputStream(OutputStream in, int size)

备注:

  (1)缓冲输入流BufferedInputSTream除了支持read和skip方法意外,还支持其父类的mark和reset方法; 
  (2)BufferedReader提供了一种新的ReadLine方法用于读取一行字符串(以\r或\n分隔); 
  (3)BufferedWriter提供了一种新的newLine方法用于写入一个行分隔符; 
 (4)对于输出的缓冲流,BufferedWriter和BufferedOutputStream,写出的数据会先在内存中缓存, 
使用flush方法将会使内存的数据立刻写出。

 

分类2:

1、java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java Io流的40多个类都是从如下4个抽象类基类中派生出来的。

  • InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
  • OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

2、java输入/输出流体系中常用的流的分类表

分类 字节输入流 字节输出流 字符输入流 字符输出流
抽象基类 InputStream OutputStream Reader Writer
访问文件 FileInputStream FileOutputStream FileReader FileWriter
访问数组 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
访问管道 PipedInputStream PipedOutputStream PipedReader PipedWriter
访问字符串     StringReader StringWriter
缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
转换流     InputStreamReader OutputStreamWriter
对象流 ObjectInputStream ObjectOutputStream    
抽象基类 FilterInputStream FilterOutputStream FilterReader FilterWriter
打印流   PrintStream   PrintWriter
推回输入流 PushbackInputStream   PushbackReader  
特殊流 DataInputStream DataOutputStream    

注:表中粗体字所标出的类代表节点流,必须直接与指定的物理节点关联:斜体字标出的类代表抽象基类,无法直接创建实例。

 

 

CODE:

/**2019.6.14
 * cpu将数据传入设备叫输出流-写入数据write,设备将数据传到cpu输入流-读数据
 *java.io 包
 * 定规范就是为了让别人写出想要的方法
 * InputStream int read()
 * OutputStream void write(,int);
 * File:对文件进行的操作:FileInputStream 是从文件里面读东西的 ,调用read
 * FileOutStream :从文件里面输出信息 ,调用write()方法
 */
package flow;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.*;
import java.util.Date;
import test.Student;
public class TestIo {
    /*测试文件输出流*/
    @Test
    public void test1() throws Exception {
        //与众多的设备打交道的流叫基础流(低级流)文件流是低级流
        FileOutputStream fout = new FileOutputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\a.txt");
        int a = 20;//00000000 00000000 00000000 00010100 一个字节代表8位
        byte[] b = {0,0,0,20};
        fout.write(b[0]);
        fout.write(b[1]);
        fout.write(b[2]);
        fout.write(b[3]);
        fout.close();
        //0号字符,20号字符显示不出来
        FileInputStream fin = new FileInputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\a.txt");
        byte[] c = new byte[4];
        c[0] = (byte) fin.read();
        c[1] = (byte) fin.read();
        c[2] = (byte) fin.read();
        c[3] = (byte) fin.read();
        System.out.println(b[3]);
        fin.close();
    }

    @Test
    public void test2() throws Exception {
        FileOutputStream fout = new FileOutputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\b.txt");
        String mesg = "Hello!Laurence。";
        // 00000000 1010111 Java采用Unicod码
        byte[] ss = mesg.getBytes();
        for (byte s : ss) {//for循环遍历的另一种形式
            fout.write(s);//对象流
        }
        fout.close();
    }

//读
    @Test
    public void test3() throws Exception {
        FileInputStream fin = new FileInputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\b.txt");
        byte[] b = new byte[fin.available()];//测量文件占用的字节长度
        int t;
        byte i = 0;
        while ((t = fin.read()) != -1) {
            b[i] = (byte) t;
            i++;
        }
        String c = new String(b);
        System.out.println(c);
        fin.close();//释放流的资源
    }


    /*
     高级流一般不读写文件
     */
    @Test
    public void test4() throws Exception {
        OutputStream fout = new FileOutputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\b.txt");
        //OutputStream :写
        ObjectOutputStream objout = new ObjectOutputStream(fout);//实际上是fout在写字节
        // ObjectOutputStream :类型转换:将其他类型转换为字节类型
        //write()是写字节的方法
        objout.writeInt(222);//对象流完成其他类型到字节类型的转换
        objout.writeDouble(22.0);
        objout.writeBoolean(true );
        objout.writeChar('l');
        objout.writeChars("liujiaheng is a good man!");
        objout.flush();//刷新
        objout.close();
        fout.close();//释放流的资源
     }




     //装饰模式:两个流类合作完成一个功能
    @Test
    public void test5() throws Exception {
        InputStream fin = new FileInputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\b.txt");
        ObjectInputStream objout = new ObjectInputStream(fin);//实际上是fout在写字节
        int r=objout.readInt();//对象流完成其他类型到字节类型的转换
        System.out.println(r);
        double t1=objout.readDouble();
        System.out.println(t1);
        boolean t2=objout.readBoolean();
        System.out.println(t2);
        char e=objout.readChar();
        System.out.println(e);
//        String t3=objout.readUTF();//此方法读不出字符串
        System.out.println(t3);
        objout.close();
        fin.close();//释放流的资源
     }

@Test
    public void test6() throws Exception {
          OutputStream fout = new FileOutputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\c.txt");
         //OutputStream :写
          ObjectOutputStream objout =new ObjectOutputStream(fout);
          Date d=new Date();
          objout.writeObject(d);
          Student s=new Student(2000,"Laurence");
          objout.writeObject(s);
          objout.flush();
          objout.close();
    }


@Test
    public void test7() throws Exception {
        InputStream fin = new FileInputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\c.txt");
        //OutputStream :实现写的操作

        ObjectInputStream obin = new ObjectInputStream(fin);//实际上是fout在写字节
        // ObjectOutputStream :类型转换
        //write()是写字节的方法;
          Date d=(Date)obin.readObject();
          Student s=(Student)obin.readObject();
          System.out.println(d);
          System.out.println(s.getName());
          System.out.println(s.getId());
          obin.close();
    }
         //高级流实现读写操作
    public void test8() throws Exception {
        OutputStream fout = new FileOutputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\c.txt");
        //OutputStream :实现写的操作
        //下面也是高级流
        BufferedOutputStream bout = new BufferedOutputStream(fout);
        ObjectOutputStream obin = new ObjectOutputStream(bout);//实际上是fout在写字节
        fout.write(22);
        bout.write(222);
        bout.flush();//此时将数据写入文件里了
        ObjectOutputStream objout = new ObjectOutputStream(
                new BufferedOutputStream(
                        new FileOutputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\d.txt")
                )
        );
        Date d=new Date();
        objout.writeObject(d);
        Student s=new Student(2000,"Laurence");
        objout.writeObject(s);
        objout.flush();
        objout.close();

    }



        public void test9() throws Exception {
            InputStream fin = new FileInputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\c.txt");
            //OutputStream :实现写的操作

            ObjectInputStream obin = new ObjectInputStream(

                    new BufferedInputStream(
                         new FileInputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\c.txt")
                    )
            );//实际上是fout在写字节
            // ObjectOutputStream :类型转换
            //write()是写字节的方法;
            Date d=(Date)obin.readObject();
            Student s=(Student)obin.readObject();
            System.out.println(d);
            System.out.println(s.getName());
            System.out.println(s.getId());
            obin.close();
        }
    }

 

package flow;
import org.junit.Test;
import java.io.*;
import  java.util.*;

public class testIo2 {

    @Test
    public void test1() throws Exception{
        FileInputStream fin=new FileInputStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\c.txt");
          int a;
          while ((a=fin.read())!=-1){
              System.out.println((char)a);
          }
        fin.close();//因为字节流是一个字节一个字节读的,但是一个字符是占用两个字节。所以读出来的数据是乱码的
        //Reader、 Writer字符流
    }


    @Test
    public  void test2() throws Exception{
        FileWriter  w=new FileWriter("D:\\新建文件夹\\练习\\javacode\\src\\test\\c.txt");
        w.write('A');
        w.write("刘家亨真棒!");
        w.close();

    }


    //字符流
    @Test
    public  void test3() throws Exception{
        BufferedWriter  w=new BufferedWriter(
                new FileWriter("D:\\新建文件夹\\练习\\javacode\\src\\test\\e.txt")
            );
        w.write("sucessful\n");
        w.flush();//
        w.close();
    }


    @Test
    public  void test4() throws Exception{
        FileReader  w=new FileReader("D:\\新建文件夹\\练习\\javacode\\src\\test\\e.txt");
        int a;
        while((a=w.read())!=-1){
            System.out.print((char)a);
        }
        w.close();
    }


    @Test
    public  void test5() throws Exception{
        BufferedReader  w=new BufferedReader(new FileReader("D:\\新建文件夹\\练习\\javacode\\src\\test\\e.txt")
         );
         String mesg = w.readLine();
         System.out.println(mesg);
         w.close();
    }


    //输入流 //输入流不需要flush//输入流包装字符流
    @Test
    public void tes6() throws Exception {
        InputStreamReader ir=new InputStreamReader(System.in) ;
        BufferedReader br=new BufferedReader(ir);
        String mesg=br.readLine();
        System.out.println(mesg);
    }

    @Test
    public void  test7() throws Exception{
        OutputStreamWriter w=new OutputStreamWriter(System.out);
         BufferedWriter bw=new BufferedWriter(w);
         bw.write("中国你好!");
         bw.flush();
         bw.close();

    }




    @Test//PrintStream主要用于包装其他字符流,还可以用来写字符串
    public void  test8() throws Exception{
      PrintStream c=new PrintStream("D:\\新建文件夹\\练习\\javacode\\src\\test\\rr.txt");
      c.print("hello"+"my name is Laurence");//
      c.flush();//刷新后才能写进去
    }

    //既可以包装字符流,又可以包装字节流,还可以给文件直接写字符,它可以和其他的流搭配着用
    @Test
    public void test9()throws Exception {
    PrintWriter pw = new PrintWriter("D:\\新建文件夹\\练习\\javacode\\src\\test\\rr.txt");
    pw.println("hello"+"bjdhsvcjhdbvcjhdsc");//给文件中写入这样一段字符
    pw.flush();
    pw.close();

    }


    @Test//文件对象   用来标识文件的,判断文件或目录是否存在
    public void test10() throws Exception{
        File f=new  File("D:\\liujiaheng\\pp");
        if(f.exists()){//判断文件目录是否存在
            System.out.println("存在");
        }else{
            System.out.println("不存在");
            System.out.println( f.mkdirs());//如果不存在就创建一个目录树
        }
    }

    @Test
    public void tes11() throws Exception {
        File f = new File( "D:\\新建文件夹\\练习\\aa.txt" );
        if(f.exists()){//判断文件是否存在
            System.out.println("存在");
        }else{
            System.out.println("不存在");
            f.createNewFile();//必须在已将创建的目录下才可以创建一个空文件
        }
    }


    @Test
    public void tes12() throws Exception {
        File f = new File("D:\\新建文件夹\\练习\\javacode\\src\\test");//这是一个目录
        File e=new File("D:\\新建文件夹\\练习\\javacode\\src\\test\\rr.txt");
        System.out.println(f.isDirectory());//判断目录是否存在
        System.out.println(f.isFile());//判断是否为文件返回值为true或false
        System.out.println(e.isDirectory());
        System.out.println(e.isFile());
    }


    @Test
    public void tes13() throws Exception {
        File f = new File("D:\\新建文件夹");
       //目录名两端加一个[]代表它是一个目录。
        if(f.isDirectory()){
            System.out.println("[" + f.getName() + "]");
        }else{
            System.out.println(f.getName());
        }
        File[] fs = f.listFiles();
        if(fs != null && fs.length > 0){
            listFile(fs,1);
        }
    }

    private void writeBlank(int level){
        for(int i = 0 ; i < level ; i++)
            System.out.print("  ");//一级打两个空格
    }

    private void listFile(File[] fs,int level){//file数组,level表示是第几层
        for(File f : fs){//循环
            writeBlank(level);//打空格
            if(f.isDirectory()){//判断这个文件是不是目录
                System.out.println("[" + f.getName() + "]");
                File[] ff = f.listFiles();
                if(ff != null && ff.length > 0){//判断目录是否为空
                    listFile(ff,++level);//不为空就迭代
                }
            }else{
                System.out.println(f.getName());//不是目录打印出名字
            }
        }
    }

}

流的重要特性:

1、流是Java 的1个类,但类不是流。

2、数据并不会在流里自动流动,因此需要我们调用流的方法,一次传输一定量的数据。

3、一个流对象只有一个传输方向,也就是说流是单向的, 数据要么从程序到设备(OutputStream), 要么从设备到程序(InputStream)。

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java学习总结-IO流的概念理解 的相关文章

  • [答疑]同事认为应该先画序列图,强烈反对先画类图

    DDD领域驱动设计批评文集 软件方法建模师 不再考查基础题 软件方法 各章合集 匿 2023 8 28 17 19 团队分享会 我和同事分享了学习软件方法下的心得 我说根据需求规格说明书画出类图 再画时序图添加类的方法 有一个高开就说应该先
  • linux中的shell及不同的shell种类的区别

    1 Linux中的shell介绍 用户登录到Linux系统后 系统将启动一个用户shell 在这个shell中 可以使用shell命令或声明变量 也可以创建并运行shell脚本程序 运行shell脚本程序时 系统将创建一个子shell 此时
  • 全球及中国智能家居市场十四五竞争形势及营销模式咨询报告2021-2027年

    全球及中国智能家居市场十四五竞争形势及营销模式咨询报告2021 2027年 HS HS HS HS HS HS HS HS HS HS HS HS HS HS 修订日期 2021年10月 搜索鸿晟信合研究院查看官网更多内容 第一章 智能家居
  • Android下使用Gson fromJson数据总是返回null

    Gson的使用相当简单 可以在json和java对象之间很方便的做转换 特别是依赖GsonFormat 工具 可以自动生成POJO的Bean 类 使用方法网上介绍很多 就不再熬述 最近在Android client端对接某开源平台 通过Re
  • 豆瓣图书统计可视化分析

    s此博客是建立于爬虫基础之上 首先我们需要对豆瓣网站的图书进行爬取 这里将不再展示爬取部分 直接进行数据清洗及可视化分析部分 一 准备数据集 数据集在下方链接当中 如需请自取 https pan baidu com s 146N5YQfE0
  • games103,作业1(逻辑梳理)

    理论相关部分可以参照刚体动力学 作业框架已知条件 兔子模型的顶点集 每个墙体的上的点P及法线N 兔子初始速度 角速度w 线速度v 全局速度衰减系数 linear decay angular decay 全局弹性系数 restitution
  • RT-DETR:《DETRs Beat YOLOs on Real-time Object Detection》

    概述 基于Transformer的端到端检测器 DETR 的高计算成本问题尚未得到有效解决 这限制了它们的实际应用 并使它们无法充分利用无后处理的好处 如非最大值抑制 NMS 本文首先分析了现代实时目标检测器中NMS对推理速度的影响 并建立
  • 如何拼接SQL语句,以及如何防止SQL注入攻击

    在书写SQL语句 或者其他语句 的过程中 有时需要将形参放入准备好的SQL变量中 就需要对语句进行拼接 拼接方法如下 字符串需要整个用双引号包裹 形参需要暴漏在双引号外面 字符串跟形参之间用加号连接 下面对这个SQL语句进行分组分析 正常的
  • 机器学习-数据挖掘中常用的数据清洗方法

    转自 https blog csdn net jiazericky article details 80322225 在数据挖掘过程中 数据清洗主要根据探索性分析后得到的一些结论入手 然后主要对四类异常数据进行处理 分别是缺失值 missi
  • Spring事务之7种传播行为

    文章目录 一 什么是事务传播行为 二 7大传播行为 详细分析下 1 PROPAGATION REQUIRED 2 PROPAGATION SUPPORTS 3 PROPAGATION MANDATORY 4 PROPAGATION REQU
  • QMap遍历(修改)

    QMap遍历 修改 QMap遍历 修改 方法一 STL风格的遍历器 个人较常用 直观易读 方便修改值 QMap
  • springcloud gateway 连接保活问题

    项目中使用了springcloud gateway作为网关 上游与负载均衡服务器连接 近期通过监控系统观察 发现网关与上游负载均衡服务器保持的TCP连接有300 初步怀疑是调用方未释放连接 用如下方法进行分析 1 周期性采集当前建立的连接及
  • C语言提高篇(wchar_t)字符类型

    概述 原来C语言也阔以这么秀 来自于灵感的编程思想 在很多大型项目上见过类似的写法 所以今天写个Demo 记录一下 方便以后赏阅 IDE vscode 1 源码 define ARRAY SIZE array sizeof array si
  • 数据结构与算法导读

    之前学过许多千奇百怪的算法 但是许多其实并没有真正动手码过代码 因此我希望能够在接下来的六个月里 把我学过的大部分算法码一遍 巩固基础知识 提高码题技巧 如果还有精力 我会尝试把一些算法竞赛题写在博客里 让大家感受一下基本算法求解复杂问题同
  • python基础----09-----类、对象、魔法方法、封装、继承、类型注解、多态、数据分析案例

    一 初识对象 说白了就是类的实例化 类是一个抽象层的定义 例如下面class Student就是定义的一个类 它是抽象层 然后stu 1 Student 我们根据类创建了一个对象 就是对类的实例化 这个实例化对象我们是可以操作的 if na
  • ElasticSearch自定义评分-看这篇就够了

    文章目录 一 适用的场景 1 基本介绍 2 使用场景 2 1根据价格评分排序 2 2根据距离评分排序 2 3根据距离价格综合评分排序 2 4自定义编写脚本 二 常用的字段解释 1 整体结构 2 function score 2 1 quer
  • [leetcode 周赛 148] 1145 二叉树着色游戏

    目录 1145 Binary Tree Coloring Game 二叉树着色游戏 描述 思路 代码实现 1145 Binary Tree Coloring Game 二叉树着色游戏 描述 有两位极客玩家参与了一场 二叉树着色 的游戏 游戏
  • python中if__name__=='__main__'_python中的if __name__=='__main__': main()解析

    python中我们会看到一段代码是这样的 1 if name main 2 main 这段代码的什么意思 我们可以知道代码的意思是如果 name main 为Ture 则调用main 函数 有句话经典的概括了这段代码的意义 Make a s
  • OSCS开源安全周报第 55 期:JeecgBoot 远程代码执行漏洞

    本周安全态势综述 OSCS 社区共收录安全漏洞 11 个 公开漏洞值得关注的是 JeecgBoot 远程代码执行漏洞 企业微信私有化后台API未授权访问漏洞 WPS Office 存在代码执行漏洞 MPS 3pcb l4mv Microso
  • 前端常用的跨域方案

    目录 前言 跨域 解决跨域方案 一 修改本地HOST 二 JSONP 三 CORS 四 proxy 前言 发送请求XMLHttpRequest ajax ajax axois fetch http 192 168 0 103 8080 fi

随机推荐

  • Google Colab启动TensorFlow出现No dashboards are active for the current data set.

    我在Colab上面跟着federated learning for image classification教程做相关的东西 在用到tensorbord的时候 使用如下代码 test skip true load ext tensorboa
  • Android 大图显示优化方案-加载Gif 自定义解码器

    基于Glide做了图片显示的优化 尤其是加载Gif图的优化 原生Glide加载Gif图性能较低 在原生基础上做了自定义解码器的优化 提升Glide性能 Glide加载大图和Gif 尤其是列表存在gif时 会有明显卡顿 cpu和内存占用较高
  • JS中版本号的比较(AI)

    在 JavaScript 中 您可以使用字符串比较算法比较版本号 版本号通常采用 x y z 格式 其中 x y 和 z 均为数字 表示主版本号 次版本号和修订版本号 以下是比较版本号的一些示例代码 示例1 简单比较 AI 您可以使用比较运
  • 线性调频脉冲压缩

    线性调频脉冲压缩 LFM信号的数学表达式为 式中为f c载波频率 rect t T 为矩形信号 K B T是调频斜率 信号的顺势频率为f c Kt T 2 t T 2 典型线性调频信号如下图 在MATLAB中实验结果如下 在远场设置了一个目
  • 3. 自建DNS(bind9)

    3 自建DNS bind9 扩展关键词 web dns NamedManager 是一个基于Web的DNS管理系统 注意 下文操作是在172 10 10 11机器上处理的 关键配置注意对应 各主机ip 及其hostname的设置 一 bin
  • C++中class关键字

    在C 语言中class是定义类的关键字 C 中也可以使用struct定义类 两者区别是 用class定义的类 如果数据成员或成员函数没有说明则默认为private 私有 的 而用struct定义的 默认为public 公共 的 示例 inc
  • Vue-Vue列表渲染v-for

    v for 指令需要以 site in sites 形式的特殊语法 一 v for 循环数组 HTML代码 div ul li item li ul div JS代码 new Vue el app data list red green b
  • 数据结构中常见的树

    哈夫曼树 Huffman Tree 哈夫曼树 又被称为最优二叉树 属于带权值二叉树的一种 它的真实节点全部分布在叶子节点中 是各种可能的组合中 WPL 值最小的形式 组合形式可能不唯一 但 WPL 值一定为最小 介绍一下 WPL Weigh
  • c语言repeat语句的用法,关于Lua中的repeat...until循环语句的使用教程

    关于Lua中的repeat until循环语句的使用教程 这篇文章主要介绍了Lua中的repeat until循环语句使用教程 是Lua入门学习中的基础教程 需要的朋友可以参考下与for和while循环不同 在循环的顶部测试循环条件 Lua
  • 【JavaWeb】PowerDesigner的使用

    PowerDesigner 数据库设计的工具 01 PowerDesigner概述 02 数据模型 2 1 概念数据模型 2 1 1 PowerDesigner使用之概念数据模型 2 1 2 根据概念模型生成物理模型 2 2 物理数据模型
  • C# 参数中this 表示扩展扩展方法

    怎么使用 public static SlicedHull Slice this GameObject obj Vector3 position Vector3 direction Material crossSectionMaterial
  • IOTCS+Ekuiper搭建物联网边缘计算平台

    背景介绍 IOTCS 是专为物联网平台而设计的工业智能网关 自从 2020 年 10 月以来 我们从需求调研 设计 定型 研发 测试经过漫长的沉淀与孵化 最终顺利实现工业智能网关最初的设想 我们凭借创新设计理念 快捷的安装以及部署 易用的扩
  • pycharm+pyqt5:CreateProcess error=5,拒绝访问

    问题背景 使用pyqt5来做python的图形界面程序开发实验 提前安装并配置了相关环境 弄了一下午 终于弄好了 总体的安装教程就不多说了 说说我遇到的错误叭 问题分析 通过命令行下载好相关工具后 需要使用pycharm的external
  • ant利用正则表达式获取文件夹名

  • wait(),waitpid()函数

    首先我们来了解一下所谓的僵尸进程 僵尸进程就是两个进程 一个父进程 一个子进程 其子进程终止后 0 3G的用户内存被回收 而3 4G的部分内存被回收 但是3 4G内存中的PCB等待父进程回收 若PCB未被父进程回收 我们称这个进程为僵尸进程
  • css/wxss 用伪类实现竖线效果(图片+源码)before、after巧用

    源代码见本文末尾 本文的代码片段用HTML语言书写 适用于网页 微信原生小程序 框架uniapp等 小程序原生开发需要实现这样一个效果 用伪类啊 这个我熟 先讲讲思路 因为用before和after的效果是一样的 所以我们任选一个 选择be
  • 基于OVSDB协议在SDN控制器ONOS开发配置管理OVS API

    为了更好的分享体验 博客搬迁至极客驿站 欢迎查阅 基于OVSDB协议在SDN控制器ONOS开发配置管理OVS API 介绍 准备工作 开发步骤 问题排查 介绍 目前protocol 中ovsdb协议层面已经实现 但是基于ovsdb prot
  • uniapp 点击复制 并有弹窗提示

    click myCopy 要复制的值 uni setClipboardData data delivery id 要被复制的内容 success gt uni showToast title 复制成功
  • 砝码称重——不同算法解决

    1 问题 砝码称重问题 设有1g 2g 3g 5g 10g 20g的砝码各若干枚 其质量 lt 1000g 求出用他们能称出的质量的种类数 不包括质量为0的情况 2 枚举法 算法思路 1 枚举不同砝码的个数 计算总重量 并将总重量对应的标志
  • Java学习总结-IO流的概念理解

    一 Java io流 的概念 流存在的意义 1 数据的传输量很大 2 内存有限 3 带宽有限 而Stream可以1点1点地逐步传输所有数据 这就是Stream存在的根本意义 想想我们是怎样下载1个大文件的 下载软件 例如x雷 并不会占用你内