java--IO

news2024/12/25 12:18:04

IO

  • 1.文件流
  • 2.常用的文件操作
    • (1)根据路径构建一个File对象
    • (2)根据父目录文件+子路径构建
    • (3)根据父目录+子路径构建
    • (4)获取文件相关信息
    • (5)目录的操作和文件的删除
  • 3.IO流原理及流的分类
    • (1)流的分类
    • (2)字节输入流(InputStream)
    • (3)字节输出流(FileOutputStream)
    • (4)文件拷贝
    • (5)字符输入流(FileReader)
    • (6)字符输出流(FileWriter)
  • 4.节点流和处理流
    • (1)节点流
    • (2)处理流(包装流)
    • (3)节点流和处理流的区别和联系
    • (4)BufferedReader
    • (5)BufferedWriter
    • (6)完成文本文件拷贝
    • (7)BufferedInputStream和BufferedOutputStream实现图片拷贝
  • 5.对象处理流
    • (1)ObjectOutputStream
    • (2)ObjectInputStream
    • (3)对象处理流使用细节
  • 6.标准输入输出流
  • 7.转换流
    • (1)InputStreamReader
    • (2)OutputStreamWriter
  • 8.打印流
    • (1)PrintStream(字节流)
    • (2)PrintWriter(字符流)
  • 9.Properties类

1.文件流

2.常用的文件操作

(1)根据路径构建一个File对象

public class CreateFile {

    public static void main(String[] args) {
        String filePath="D:\\io\\hello.txt";
        create1(filePath);
    }

    //根据路径构建一个File对象
    public static void create1(String filePath){
        //在内存中有了一个file对象
        File file = new File(filePath);
        try {
            file.createNewFile();//写入到磁盘对应的位置
            System.out.println("文件创建成功");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    
}

(2)根据父目录文件+子路径构建

    //根据父目录文件+子路径构建
    public static void create2(String parent,String fileName){
        File parentFile = new File(parent);
        File file = new File(parentFile, fileName);
        try {
            file.createNewFile();
            System.out.println("文件创建成功");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

(3)根据父目录+子路径构建

    //根据父目录+子路径构建
    public static void create3(String parent,String fileName){
        File file = new File(parent, fileName);
        try {
            file.createNewFile();
            System.out.println("文件创建成功");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

(4)获取文件相关信息

public class GetInformationInFile {

    public static void main(String[] args) {
        String path="d:\\io\\hello.txt";
        info(path);
    }

    public static void info(String filePath){
        //先创建文件对象
        File file = new File(filePath);
        //得到文件名
        System.out.println("文件名="+file.getName());
        //得到文件绝对路径
        System.out.println("文件绝对路径="+file.getAbsolutePath());
        //得到文件父级目录
        System.out.println("文件=父级目录"+file.getParent());
        //得到文件大小(字节)
        System.out.println("文件大小="+file.length());
        //查看文件是否存在
        System.out.println("是否存在="+file.exists());
        //是不是一个文件
        System.out.println("是否是一个文件="+file.isFile());
        //是不是一个目录
        System.out.println("是否是一个目录="+file.isDirectory());
    }
}

(5)目录的操作和文件的删除

public class Directories {

    public static void main(String[] args) {
        //String path="D:\\io\\hello.txt";
        //m1(path);
        String path="D:\\io\\111";
        m3(path);
    }

    //判断文件是否存在 如果存在就删除
    public static void m1(String path){
        File file = new File(path);
        if (file.exists()){
            if (file.delete()){
                System.out.println(path+"删除成功");
            }else {
                System.out.println(path+"删除失败");
            }
        }else {
            System.out.println("该文件不存在");
        }
    }

    //判断目录是否存在 如果存在就删除
    //在java编程中 目录也当作文件
    public static void m2(String path){
        File file = new File(path);
        if (file.exists()){
            if (file.delete()){
                System.out.println(path+"删除成功");
            }else {
                System.out.println(path+"删除失败");
            }
        }else {
            System.out.println("该目录不存在");
        }
    }

    //判断目录是否存在 如果存在就提示存在,如果不存在就删除
    public static void m3(String path){
        File file = new File(path);
        if (file.exists()){
            System.out.println("该目录存在");
        }else {
            //创建多级目录
            if (file.mkdirs()){
                System.out.println(path+" 目录创建成功");
            }else {
                System.out.println(path+" 目录创失败");
            }
        }
    }
}

3.IO流原理及流的分类

(1)流的分类

(1)按操作数据单位不同分为:字节流(保证操作二进制文件无损操作)   字符流(按字符读取,效率高,操作文本文件)

(2)按数据流的方向不同:   输入流       输出流

(3)按流的角色不同:      节点流        处理流

(2)字节输入流(InputStream)

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\hello.txt";
        readFile2(path);
    }

    /**
     * 演示读取文件
     * 单个字节读取 读取效率低
     * @param path
     */
    public static void readFile1(String path){
        int readData=0;
        FileInputStream fileInputStream=null;
        try {
            //创建FileInputStream对象 用于读取文件
            fileInputStream = new FileInputStream(path);
            //从该输入流读取一个字节的数据 如果没有输入可用 此方法将阻止
            //如果返回-1 表示读取完毕
            while ((readData=fileInputStream.read())!=-1){
                System.out.print((char) readData+" ");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭文件流  释放资源
            try {
                fileInputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

    /**
     * 使用read(byte[] b)读取文件 提高效率
     * @param path
     */
    public static void readFile2(String path){
        int readLen=0;
        //字节数组
        byte[] buf=new byte[8];//一次读取8个字节
        FileInputStream fileInputStream=null;
        try {
            //创建FileInputStream对象 用于读取文件
            fileInputStream = new FileInputStream(path);
            //从该输入流读取buf.length字节的数据 此方法将阻塞,直到某些输入可用
            //如果返回-1 表示读取完毕
            //如果读取正常 返回实际读取的字节数
            while ((readLen=fileInputStream.read(buf))!=-1){
                System.out.println(new String(buf,0,readLen));//转换为字符串显示
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭文件流  释放资源
            try {
                fileInputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

(3)字节输出流(FileOutputStream)

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\test.txt";
        writeFile(path);
    }

    /**
     * 演示使用FileOutputStream
     * 将数据写入文件中,如果该文件不存在,则创建该文件
     * 当写入内容时,会覆盖原来的内容
     * 如果不想覆盖:new FileOutputStream(path,true),则以追加的形式写入
     * @param path
     */
    public static void writeFile(String path){
        //创建FileOutputStream对象
        FileOutputStream fileOutputStream=null;
        try {
            //得到FileOutputStream对象
            fileOutputStream=new FileOutputStream(path);

            //写入一个字节
            //fileOutputStream.write('t');

            //写入字符串
            //str.getBytes()->可以把字符串转为字节数组
            String str="TangMeng";
            fileOutputStream.write(str.getBytes());

        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

(4)文件拷贝


(5)字符输入流(FileReader)

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\ha.txt";
        fileReaderTest2(path);
    }

    /**
     *使用字符输入流操作文件
     * 每次读取单个字符
     */
    public static void fileReaderTest(String path){

        FileReader fileReader=null;
        int data=0;

        try {
            fileReader=new FileReader(path);
            //循环读取 每次读取单个字符
            while ((data=fileReader.read())!=-1){
                System.out.println((char) data);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }


    /**
     *使用字符输入流操作文件
     *使用字符数组来读取文件
     */
    public static void fileReaderTest2(String path){

        FileReader fileReader=null;
        char[] buf=new char[8];
        int readLen=0;

        try {
            fileReader=new FileReader(path);
            //循环读取 返回的是实际读取的字符数
            //如果返回-1,说明到文件结束
            while ((readLen=fileReader.read(buf))!=-1){
                System.out.print(new String(buf,0,readLen));
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                fileReader.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

(6)字符输出流(FileWriter)

FileWriter使用后必须要关闭或者刷新,才能将内容写入文件
public class test {

    public static void main(String[] args) {
        String path="d:\\io\\haha.txt";
        fileWriterTest(path);
    }

    /**
     *使用字符输出流操作文件
     */
    public static void fileWriterTest(String path){

        FileWriter fileWriter=null;
        char[] chars={'a','b','c'};

        try {
            fileWriter=new FileWriter(path,true);
            //写入单个字符
            fileWriter.write('H');
            //写入指定数组
            fileWriter.write(chars);
            //写入指定数组的指定部分
            fileWriter.write("哈哈哈".toCharArray(),0,2);
            //写入整个字符串
            fileWriter.write("哈哈");
            //写入字符串的指定部分
            fileWriter.write("哈哈哈哈哈哈",4,3);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            //fileWriter需要关闭流或者flush才能把数据真正写入到文件
            try {
                fileWriter.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }

}

4.节点流和处理流

在这里插入图片描述

(1)节点流

节点流可以从一个特定的数据源读写数据

(2)处理流(包装流)

处理流封装已经存在的流,为程序提供更为强大的读写功能

性能提高:主要以增加缓冲的方式来提高输入输出效率
操作便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便

(3)节点流和处理流的区别和联系

(1)节点流是底层流/低级流,直接跟数据源相接
(2)处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出
(3)处理流对节点流进行包装,使用了修饰器模式,不会直接与数据源相连

(4)BufferedReader

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\haha.txt";
        bufferReaderTest(path);
    }

    /**
     *使用处理流操作文件
     */
    public static void bufferReaderTest(String path){
        BufferedReader bufferedReader=null;
        try {
            bufferedReader=new BufferedReader(new FileReader(path));
            //读取
            String line;
            //bufferedReader.readLine() 按行读取  当返回null时,表示文件读取完毕
            while ((line=bufferedReader.readLine())!=null){
                System.out.println(line);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭流 只需要关闭bufferedReader就可以了,因为底层会自动关闭节点流
            try {
                bufferedReader.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

}

(5)BufferedWriter

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\haha.txt";
        bufferWriterTest(path);
    }

    /**
     *使用处理流操作文件
     */
    public static void bufferWriterTest(String path) {
        BufferedWriter bufferedWriter=null;
        try {
            bufferedWriter=new BufferedWriter(new FileWriter(path,true));
            bufferedWriter.write("哈哈哈");
            bufferedWriter.newLine();//插入一个和系统相关的换行符
            bufferedWriter.write("哈哈哈");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭流
            try {
                bufferedWriter.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

(6)完成文本文件拷贝

public class test {

    public static void main(String[] args) {
        String from="d:\\io\\haha.txt";
        String to="d:\\io\\haha1.txt";
        bufferCopyTest(from,to);
    }

    /**
     *使用处理流拷贝文件
     */
    public static void bufferCopyTest(String from,String to) {

        BufferedReader bufferedReader=null;
        BufferedWriter bufferedWriter=null;
        String line=null;

        try {
            bufferedReader=new BufferedReader(new FileReader(from));
            bufferedWriter=new BufferedWriter(new FileWriter(to));
            //读取
            //readLine()读取一行的数据 但没有都换行符
            while ((line=bufferedReader.readLine())!=null){
                //每读取一行 就写出
                bufferedWriter.write(line);
                //插入换行
                bufferedWriter.newLine();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭流
            try {
                bufferedReader.close();
                bufferedWriter.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

(7)BufferedInputStream和BufferedOutputStream实现图片拷贝

public class test {

    public static void main(String[] args) {
        String from="d:\\io\\2.jpg";
        String to="d:\\io\\3.jpg";
        bufferCopyTest(from,to);
    }

    /**
     *使用处理流拷贝文件
     */
    public static void bufferCopyTest(String from,String to) {
        BufferedInputStream bis=null;
        BufferedOutputStream bos=null;
        try {
            bis=new BufferedInputStream(new FileInputStream(from));
            bos=new BufferedOutputStream(new FileOutputStream(to));
            //循环读取文件,并写出到目的地
            byte[] buf=new byte[1024];
            int readLen=0;
            //当返回-1时,就表示文件读取完毕
            while ((readLen= bis.read(buf))!=-1){
                bos.write(buf,0,readLen);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                bis.close();
                bos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

5.对象处理流


(1)ObjectInputStream:提供反序列化功能 

(2)ObjectOutputStream:提供序列化功能 

(1)ObjectOutputStream

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\xu";
        objectOutputStreamTest(path);
    }

    /**
     *使用objectOutputStream,完成数据的序列化
     * 序列化后保存的文件格式不是纯文本的,而是按照要保存的格式保存的
     */
    public static void objectOutputStreamTest(String path) {
        ObjectOutputStream oos=null;
        try {
            oos=new ObjectOutputStream(new FileOutputStream(path,true));
            //序列化数据到文件中
            oos.writeInt(100);//int -> Integer(实现了Serializable)
            oos.writeBoolean(true);//boolean -> Boolean
            oos.writeChar('a');//char -> Character
            oos.writeDouble(1.8);//double -> Double
            oos.writeUTF("小白");//String
            //保存一个dog对象
            oos.writeObject(new Dog("旺财",1));
            System.out.println("保存数据完毕");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                oos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

class Dog implements Serializable{

    private String name;
    private int age;


    public Dog(String name,int age){
        this.name=name;
        this.age=age;
    }

	    public String getName(){
        return name;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    
}

(2)ObjectInputStream

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\xu";
        objectInputStreamTest(path);
    }

    /**
     *使用objectInputStream,完成数据的反序列化
     */
    public static void objectInputStreamTest(String path) {
        ObjectInputStream ois=null;
        try {
            ois=new ObjectInputStream(new FileInputStream(path));
            //读取
            //读取的顺序需要和保存时的顺序一致
            System.out.println(ois.readInt());
            System.out.println(ois.readBoolean());
            System.out.println(ois.readChar());
            System.out.println(ois.readDouble());
            System.out.println(ois.readUTF());
            Dog dog =(Dog) ois.readObject();
            System.out.println(dog);//底层:Object->dog
            dog.getName();//可以调用dog类里边的方法
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                ois.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

class Dog implements Serializable{

    private String name;
    private int age;


    public Dog(String name,int age){
        this.name=name;
        this.age=age;
    }

    public String getName(){
        return name;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

(3)对象处理流使用细节

(1)读写顺序一致

(2)要求序列化或反序列化的对象,需要实现 Serializable

(3)序列化类中建议添加SerialVersionUID,可以提高版本的兼容性。加了版本号的话,以后对该类的修改
	会看做一次修改而不是当作一个新类

(4)序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的成员

(5)序列化对象时,要求里面属性的类型也需要实现序列化接口

(6)序列化具备可继承性,如果没类实现了可序列化,则它的所有子类也已经默认实现了

6.标准输入输出流

System.in    标准输入   键盘  
System.out   标准输出   显示器

7.转换流

将字节流转换为字符流
为了防止读取时出现的中文乱码问题

(1)InputStreamReader

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\ha.txt";
        inputStreamReaderTest(path);
    }

    /**
     *使用 InputStreamReader 转换流解决中文乱码问题
     * 将字节流FileInputStream 转换成字符流InputStreamReader,指定编码utf-8
     */
    public static void inputStreamReaderTest(String path) {
        InputStreamReader inputStreamReader=null;
        BufferedReader bufferedReader=null;
        try {
            //将FileInputStream转为InputStreamReader,指定编码utf-8
            inputStreamReader=new InputStreamReader(new FileInputStream(path),"utf-8");
            //把InputStreamReader传入 BufferedReader
            bufferedReader=new BufferedReader(inputStreamReader);
            //读取
            String s = bufferedReader.readLine();
            System.out.println("读取到内容="+s);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }finally {
            //关闭流
            try {
                bufferedReader.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

(2)OutputStreamWriter

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\ha.txt";
        outputStreamWriterTest(path);
    }

    /**
     *使用 OutputStreamWriter
     * 将字节流FileOutputStream 转换成字符流OutputStreamWriter,指定编码utf-8
     */
    public static void outputStreamWriterTest(String path) {
        OutputStreamWriter osw=null;
        try {
            osw=new OutputStreamWriter(new FileOutputStream(path,true),"utf-8");
            osw.write("哈哈哈,傻子");
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            try {
                osw.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

8.打印流

(1)PrintStream(字节流)

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\ha.txt";
        printStreamTest(path);
    }

    /**
     *使用 PrintStream(字节打印流)
     */
    public static void printStreamTest(String path) {
        PrintStream out=System.out;
        //在默认情况下,PrintStream输出数据的位置是显示器
        out.print("hello!world");
        //因为print的底层使用的是write,所以可以直接调用write进行打印
        try {
            out.write("哈哈".getBytes());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        out.close();
        //可以修改打印流输出的位置
        try {
            System.setOut(new PrintStream(path));
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        System.out.println(333);
    }
}

(2)PrintWriter(字符流)

public class test {

    public static void main(String[] args) {
        String path="d:\\io\\ha.txt";
        printWriterTest(path);
    }

    /**
     *使用 PrintWriter(字符打印流)
     */
    public static void printWriterTest(String path) {
        
        PrintWriter printWriter=null;
        
        //输出到控制台
        printWriter=new PrintWriter(System.out);
        printWriter.print("12345678");

        //修改输出位置
        try {
            printWriter=new PrintWriter(new FileWriter(path));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        printWriter.print("你好呀");
        printWriter.close();
    }
}

9.Properties类

(1)load:加载配置文件的键值对到Properties对象

(2)list:将数据显示到指定设备

(3)getProperty(key):根据键获取值

(4)setProperty(key,value):设置键值对到Properties对象

(5)store:将Properties中的键值对存储到配置文件,在idea中,保存信息到配置文件,如果含有中文,
	会存储为unicode码
public class test {

    public static void main(String[] args) {
        String path="d:\\io\\ha.txt";
        testProperties();
    }

    public static void testProperties(){
        //1.创建Properties对象
        Properties properties = new Properties();
        //2.加载指定配置文件
        try {
            properties.load(new FileReader("src\\mysql.properties"));
            //3.把键值对显示在控制台
            properties.list(System.out);
            //4.根据key获取对应的value
            String name= properties.getProperty("name");
            System.out.println(name);
            //5.向配置文件添加内容
            properties.setProperty("charset","utf8");
            properties.setProperty("ha","hah");
            properties.store(new FileOutputStream("src\\mysql.properties"),null);
            System.out.println("保存成功");
			//6.修改键值对 setProperty(key,value)方法:
            //如果该文件没有对应的key,就是创建;如果有对应的key,就是修改
            properties.setProperty("ha","hahahaha");
            properties.store(new FileOutputStream("src\\mysql.properties"),null);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

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

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

相关文章

计算机图形学07:有效边表法的多边形扫描转换

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、…

Git 企业级分支提交流程

Git 企业级分支提交流程 首先在本地分支hfdev上进行开发,开发后要经过测试。 如果测试通过了,那么久可以合并到本地分支develop,合并之后hfdev和development应该完全一样。 git add 文件 git commit -m ‘注释’ git checkout develop //切换…

svn使用

一、SVN概述 1.1为什么需要SVN版本控制软件 1.2解决之道 SCM:软件配置管理 所谓的软件配置管理实际就是对软件源代码进行控制与管理 CVS:元老级产品 VSS:入门级产品 ClearCase:IBM公司提供技术支持,中坚级产品 1.…

【无标题】开发板设置系统时间

开发板设置系统时间环境查看系统时间查看硬件时间设置系统时间设置RTC时间时钟包括硬件时钟和系统时钟,系统时钟就是linux系统显示的时间,用命令 date可以显示当前系统时间;硬件时钟就是硬件自身的时间了。它们两者没有关系的,但是…

如何利用Power Virtual Agents机器人远程打开电脑中的应用

今天我们来介绍如何利用Power Virtual Agents来远程控制电脑。我们的设计思路是在聊天机器人里输入触发短语后打开自己电脑中的题库软件。 首先,进入已经创建好的聊天机器人编辑界面。 新建一个主题后,在“新建主题”中添加“触发短语”。 添加节点后&a…

C++代码优化(3):条款13~17

"野性袒露着灵魂纯粹"条款13:以对象管理资源(1)什么是资源?C中最常使用的资源就是动态内存分配,在系统编程层面上,文件描述符(fd)、互斥锁(mutex)、套接字网络socket……不管是哪一种资源,重要的是,你不使用…

CEC2014:鱼鹰优化算法(Osprey optimization algorithm,OOA)求解CEC2014(提供MATLAB代码

一、鱼鹰优化算法简介 鱼鹰优化算法(Osprey optimization algorithm,OOA)由Mohammad Dehghani 和 Pavel Trojovsk于2023年提出,其模拟鱼鹰的捕食行为。 鱼鹰是鹰形目、鹗科、鹗属的仅有的一种中型猛禽。雌雄相似。体长51-64厘米…

Spark 任务调度机制

1.Spark任务提交流程 Spark YARN-Cluster模式下的任务提交流程,如下图所示: 图YARN-Cluster任务提交流程 下面的时序图清晰地说明了一个Spark应用程序从提交到运行的完整流程: 图Spark任务提交时序图 提交一个Spark应用程序,首…

mysql数据库之存储过程

一、存储过程简介。 存储过程是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是也有好处的。 存储过程思想上很简单&…

Mysql常见面试题总结

1、什么是存储引擎 存储引擎指定了表的类型,即如何存储和索引数据,是否支持事务,同时存储引擎也决定了表在计算机中的存储方式。 2、查看数据库支持哪些存储引擎使用什么命令? -- 查看数据库支持的存储引擎 show engines; 或者 …

百趣代谢组学分享,关于儿童Graves病相关的新环境物质的鉴定

代谢组学文章标题:Identification of Novel Environmental Substances Relevant to Pediatric Graves’ Disease 发表期刊:Frontiers in endocrinology 影响因子:6.055 作者单位:苏州大学附属儿童医院 百趣提供服务&#xf…

外贸建站多少钱才能达到预期效果?

外贸建站多少钱才能达到预期效果?这是每个外贸企业都会问的问题。作为一个做外贸建站多年的人,我有一些个人的操盘感想。 首先,我认为外贸建站的投资是非常必要的。 因为在现代社会,网站已经成为外贸企业开展业务的必要工具之一…

3种方法删除7-Zip压缩包的密码

7-Zip压缩软件是一款完全免费且开源的软件,不仅能压缩和解压7-Zip压缩包,还能给压缩包设置打开密码。 有些小伙伴可能会遇到这样的问题,7-Zip压缩包设置密码后,过了一段时间不需要密码保护了,或者一不小心忘记了密码&…

后端快速上手前端三剑客 HtmlCSSJavaScript

文章目录前言HTML1.基础标签2.多媒体标签:3.表格&列表&布局4.表单CSS1.简介2.导入方式3.选择器JavaScript1.简介2.引入方式3.基本语法4.对象(1) 基本对象(2) BOM对象(3) DOM对象5.事件前言 结构:HTML 表现:CSS 行为:Java…

D. Linguistics(思维 + 贪心)

Problem - D - Codeforces Alina发现了一种奇怪的语言,它只有4个单词:a, B, AB, BA。事实也证明,在这种语言中没有空格:一个句子是通过将单词连接成一个字符串来写的。Alina发现了一个这样的句子,她很好奇:有没有可能它恰好由a个单词a, b个单…

EasyExcel You can try specifying the ‘excelType‘ yourself 异常排查与处理

目录 问题发现 报错信息 问题排查 1、确定异常 2、查询easyexcel源码读取文件源码 3、查看业务代码 优化方案 1、将路径获取文件流的方式换为httpclient获取 2、dug测试修改代码 总结 问题发现 在测试环境测试导入订单,发现订单导入提示数据导入异常。 …

Python dict字典全部操作方法

文章目录一. 介绍二. 字典的创建1. 手动创建2. 使用内置函数dict()创建3. 使用dict.fromkeys()方法创建三. 字典元素的读取1. 下标方式读取Value2. dict.get()读取Value3. keys()方法返回“键”4. values()方法返回“值”5. items()方法返回“键-值”对四. 字典元素的添加与修改…

【20230227】回溯算法小结

回溯法又叫回溯搜索法,是搜索的一种方式。回溯法本质是穷举所有可能。如果想让回溯法高效一些,可以加一些剪枝操作。回溯算法解决的经典问题:组合问题切割问题子集问题排列问题棋盘问题如何去理解回溯法?回溯法解决的问题都可以抽…

hadoop调优

hadoop调优 1 HDFS核心参数 1.1 NameNode内存生产配置 1.1.1 NameNode内存计算 每个文件块大概占用150byte,如果一台服务器128G,能存储的文件块如下 128 (G)* 1024(MB) * 1024(KB) * 1024(Byte) / 150 Byte 9.1 亿 1.1.2 Hadoop2.x 在Hadoop2.x中…

Linux--多线程(3)

目录1. POSIX信号量1.1 概念2. 基于环形队列的生产消费者模型2.1 环形队列的基本原理2.2 基本实现思想3. 多生产多消费1. POSIX信号量 1.1 概念 信号量本质是一个计数器,申请了信号量以后,可以达到预定临界资源的效果。 POSIX信号量和SystemV信号量相同…