不用怀疑!这就是把Java.I/O流讲解的最清楚的一篇文章

SRE命令行兵器谱之一:精通top/htop - 从性能“体检”到瓶颈“解剖” 本文介绍了SRE在排查性能问题时如何有效使用top/htop工具。通过真实案例,说明如何通过"两步法"分析top输出:先看全局指标判断系统状态(如load average和%wa),再分析进程列表锁定问题源头。特别强调高I/O Wait时需转向磁盘排查,而高CPU使用率则需关注应用代码。文章还推荐使用htop提升效率,并提供了关键指标速查表。最后指出top的局限性,提示需要结合lsof等工具进行更深入排查。全文聚焦SRE实战思维,帮助读者快速掌握性能分析的基本方法。 阅读详情

最新互联网大厂面试真题、Java程序员面试策略(面试前的准备、面试中的技巧)请访问GitHub

简单梳理

理解

对于文件流来说是io流的基础,牵扯到缓冲流,缓冲流是在内存中使用io流的各类操作,转换流顾名思义,是字节与字符流之间的转换 ,要先有字节流和字符流,对象流,最主要的是类的序列化与反序列化,相当于一个封装转化,随机存取流,也是在有字节流和字符流的基础上。

File类

能新建,删除,重命名文件和目录,但不能访问文件内容,访问文件内容要通过输入/输出流

简单梳理

File操作

package day12;
 
import java.io.File;
import java.io.IOException;
 
public class Test {
    public static void main(String[] args) {
    File f = new File("D:\\test\\abc\\tt.txt");//这个时候对象f就是tt.txt文件
    File f4 = new File("D:\\test\\abc");//这个目录
    <!-- File f2 = new File("D:/test/abc/tt.txt");
    File f3 = new File("D:" + File.separator + "test\\abc\\tt.txt");
    File f1 = new File("D:\\test","abc\\tt.txt");//这个f1也是tt.txt文件,这种实验相对比较少 -->
 
    //注意,\在文件中是路径的分隔符,但是在java编程中一个\的意思是转移符,在java中\\或者/才是文件的分隔符
    //也可以File.separator作为文件分隔符
    System.out.println(f.getName());//获取文件名
    System.out.println(f4.getName());//获取文当前的文件名称
    
    File f5 = new File("src/day12/Test.java");//使用相对路径来创建file对象
    
    System.out.println(f5.getPath());//获取文件或者文件夹的路径,就是new file时候写的路径
    System.out.println(f5.getAbsolutePath());//获取当前文件的绝对路径
    
    System.out.println(f5);
    System.out.println(f5.getAbsoluteFile());//返回一个用当前的文件的绝对路径构建的file对象
    
    System.out.println(f5.getParent());//返回当前文件或者文件夹的父级路径
    
            f.renameTo(new File("D:\\test\\abc\\tt1.txt"));//给文件或文件夹重命名
    
    File f6 = new File("D:\\test\\abc1");
    System.out.println(f6.exists());//判断文件或者文件夹是否存在
    
    File f7 = new File("D:\\test\\abc\\tt1.txt");
    System.out.println(f7.canWrite());//判断文件是否可写
    System.out.println(f7.canRead());//判断文件是否可读
    
    System.out.println(f7.isFile());//判断当前的file对象是不是文件
    System.out.println(f7.isDirectory());//判断当前的file对象是不是文件夹或者目录
    
    System.out.println(f7.lastModified());//获取文件的最后修改时间,返回的是一个毫秒数
    System.out.println(f7.length());//返回文件的长度,单位是字节数
    
    File f8 = new File("D:\\test\\abc\\tt2.txt");
    System.out.println(f8.exists());//判断文件是否存在
    if(!f8.exists()){
        try {
            f8.createNewFile();//创建新的文件
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    <!-- f8.delete();//删除文件
 
    File f9 = new File("D:\\test\\abc\\cc");
    File f9 = new File("D:\\test\\abc\\cc\\dd");
    
    f9.mkdir();//创建单层目录,如果使用这一方法来创建多层目录,就得一层一层的执行mkdir()
 
    File f10 = new File("D:\\test\\abc\\a\\b\\c");
    
    f10.mkdirs();//这个方法是直接用来创建多层目录 -->
    
    File f11 = new File("D:\\test");
    String[] fl = f11.list();//返回的是当前文件夹的子集的名称,包括目录和文件
    for(String s : fl){
        System.out.println(s);
    }
    
    File[] fs = f11.listFiles();//返回的是当前文件夹的子集的file对象,包括目录和文件
    for(File ff : fs){
        System.out.println(ff);
    }
}

递归遍历文件

    public void test(File file){
        if(file.isFile()){
            System.out.println(file.getAbsolutePath() + " 是文件");
        }else{
            System.out.println(file.getAbsolutePath() + " 是文件夹");
            //如果是文件夹,这个文件夹里就可能有子文件夹或者文件
            File[] fs = file.listFiles();//获取当前文件夹下的子文件夹或者文件的file对象
            if(fs != null && fs.length > 0){
                for(File ff : fs){
                    
                    test(ff);//递归
                    
					if(ff.isFile()){
						System.out.println(ff.getAbsolutePath() + " 是文件");
					}else{
						System.out.println(ff.getAbsolutePath() + " 是文件夹");
						File[] fs1 = ff.listFiles();
						if(fs1 != null && fs1.length > 0){
							for(File ff1 : fs1){
								
							}
						}
					}
                    
                }
            }
            
        }
    }
}

文件流:数据流的读写都是基于文件的操作

字节流非常通用,可以用来操作字符的文档,还可以操作然后的其他类型文件,都是使用二进制转换

FileInputStream:字节输入流

public static void testFileInputStream(){
    try {
        FileInputStream in = new FileInputStream("D:/test/abc/tt1.txt");
        
        byte[] b = new byte[10];//设置一个byte数组接收读取的文件的内容
        
        int len = 0;//设置一个读取数据的长度
        
        //in.read(b);//in.read方法有一个返回值,返回值是读取的数据的长度,如果读取到最后一个数据,还会向后读一个,这个时候返回值就是-1
        //也就意味着当in.read的返回值是-1的时候整个文件就读取完毕了
        
        while((len = in.read(b)) != -1){
            System.out.println(new String(b,0,len));
            //new String(b,0,len),参数1是缓冲数据的数组,参数2是从数组的那个位置开始转化字符串,参数3是总共转化几个字节
        }
        
        in.close();//注意。流在使用完毕之后一段要关闭
    } catch (Exception e) {
        e.printStackTrace();
    }
}

FileOutputStream:字节输出流

public static void testFileOutputStream(){
	try {
		FileOutputStream out = new FileOutputStream("D:/test/abc/tt4.txt");//指定行tt4输出数据
		String str = "knsasjadkajsdkjsa";
		out.write(str.getBytes());//把数据写到内存
		out.flush();//把内存中的数据刷写到硬盘
		out.close();//关闭流
		
		
	} catch (Exception e) {
		e.printStackTrace();
	}
}

复制文件到指定位置

public static void copyFile(String inPath, String outPanth){
	try {
		FileInputStream in = new FileInputStream(inPath);//读取的源文件
		
		FileOutputStream out = new FileOutputStream(outPanth);//复制到哪里
		
		byte[] b = new byte[100];
		
		int len = 0;
		
		while((len = in.read(b)) != -1){
			out.write(b, 0, len);//参数1是写的缓冲数组,参数2是从数组的那个位置开始,参数3是获取的数组的总长度
		}
		
		out.flush();//把写到内存的数据刷到硬盘
		out.close();
		in.close();
		
	} catch (Exception e) {
		e.printStackTrace();
	}
}

FileReader:字符输入流

public static void testFileReader(String inPath){
	try {
		FileReader fr = new FileReader(inPath);//创建文件字符输入流的对象
		
		char[] c = new char[10];//创建临时存数据的字符数组
		
		int len = 0;//定义一个输入流的读取长度
		
		while((len = fr.read(c)) != -1){
			System.out.println(new String(c, 0, len));
		}
		
		fr.close();//关闭流
		
	} catch (Exception e) {
		e.printStackTrace();
	}
}

FileWriter:字符输出流

public static void testFileWriter(String text,String outPath){
	try {
		FileWriter fw = new FileWriter(outPath);
		fw.write(text);//写到内存中
		fw.flush();//把内存的数据刷到硬盘
		fw.close();//关闭流
		
	} catch (Exception e) {
		e.printStackTrace();
	}
}

复制文件到指定位置(字符流只适合操作内容是字符文件)

public static void copyFile(String inPaht, String outPath){
	try {
		FileReader fr = new FileReader(inPaht);
		FileWriter fw = new FileWriter(outPath);
		
		char[] c = new char[100];
		
		int len = 0;
		
		while((len = fr.read(c)) != -1){//读取数据
			fw.write(c,0,len);//写数据到内存
		}
		
		fw.flush();
		
		fw.close();
		fr.close();
		
		
	} catch (Exception e) {
		e.printStackTrace();
	}
}

缓冲流:数据流的读写都是基于内存的操作

  • 缓冲流要套接在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法,对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出
  • 简单来说就是先把数据缓存到内存里,在内存中做io操作

BufferedInputStream:缓冲字节输入流

public static void testBufferedInputStream() throws Exception {
	// 文件字节输入流对象
	FileInputStream in = new FileInputStream("D:\\testdemo\\demo\\src\\day13\\tt.txt");
 
	// 把文件字节输入流放到缓冲字节输入流对象
	BufferedInputStream br = new BufferedInputStream(in);
 
	byte[] b = new byte[10];
 
	int len = 0;
 
	while ((len = br.read(b)) != -1) {
		System.out.println(new String(b, 0, len));
	}
 
	// 关闭流的时候,本着一个最晚开的最早关,依次关
	br.close();
	in.close();
}

BufferedOutputStream:缓冲字节输入流

public static void testBufferedOutputStream() throws Exception {
	// 创建字节输出流对象
	FileOutputStream out = new FileOutputStream("D:\\testdemo\\demo\\src\\day13\\tt1.txt");
 
	// 把字节输出流对象放到缓冲字节输出流中
	BufferedOutputStream bo = new BufferedOutputStream(out);
 
	String s = "hello world";
 
	bo.write(s.getBytes());// 写到内存中
 
	bo.flush();// 刷到硬盘上
 
	// 关闭流的时候,本着一个最晚开的最早关,依次关
	bo.close();
	out.close();
}

缓冲流实现文件的复制

public static void copyFile() throws Exception {
	// 缓冲输入流
	BufferedInputStream br = new BufferedInputStream(
			new FileInputStream("D:\\testdemo\\demo\\src\\day13\\tt1.txt"));
 
	// 缓冲输出流
	BufferedOutputStream bo = new BufferedOutputStream(
			new FileOutputStream("D:\\testdemo\\demo\\src\\day13\\tt2.txt"));
 
	byte[] b = new byte[1024];
 
	int len = 0;// 设置一个没出读取到的数据的长度,直到br.read方法执行到最后(比如说文件中只有hello
				// world,执行到最后一个就读取d的后面,这个时候返回值就是-1)
 
	while ((len = br.read(b)) != -1) {
		bo.write(b, 0, len);// 写到内存
	}
 
	bo.flush();// 刷到硬盘
 
	bo.close();
	br.close();
}

BufferedReader:缓冲字符输入流

public static void testBufferedReader() throws Exception {
	FileReader r = new FileReader("D:\\testdemo\\demo\\src\\day13\\tt.txt");
 
	BufferedReader br = new BufferedReader(r);
 
	char[] c = new char[100];
 
	int len = 0;
 
	while ((len = br.read(c)) != -1) {// br.read(c)读到文件的最后一个字符的下一位,返回值就是-1
		System.out.println(new String(c, 0, len));
	}
	br.close();
	r.close();
}

BufferedWriter:缓冲字符输出流

public static void testBufferedWriter() throws Exception {
	FileWriter fw = new FileWriter("D:\\testdemo\\demo\\src\\day13\\tt3.txt");
 
	BufferedWriter bw = new BufferedWriter(fw);
 
	String s = "hello world!!!!";
 
	bw.write(s);
 
	bw.flush();
 
	bw.close();
	fw.close();
}

缓冲字符流复制文件

public static void copyFile() throws Exception {
	BufferedReader br = new BufferedReader(new FileReader("D:\\testdemo\\demo\\src\\day13\\tt3.txt"));
 
	BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\testdemo\\demo\\src\\day13\\tt4.txt"));
 
	char[] c = new char[100];
 
	int len = 0;
 
	while ((len = br.read(c)) != -1) {
		bw.write(c, 0, len);
	}
 
	bw.flush();
 
	bw.close();
	br.close();
}

转换流

  • 转换字节输入流为字符输入流 注意,在转换字符流的时候,设置的字符集编码要与读取的文件的数据的编码一致 不然就会出现乱码 InputStreamReader
  • 所有的文件都是有编码格式,对于我们来说,TXT和java文件一般来讲有三种编码,ISO8859-1,西欧编码,是纯粹英文编码,不适应汉字,GBK和UTF-8,这两编码是适用于重要和英文,我们一般使用UTF-8编码

InputStreamReader:转换字节输入流为字符输入流

public static void testInputStreamReader() throws Exception {
	FileInputStream fs = new FileInputStream("D:\\testdemo\\demo\\src\\day13\\tt5.txt");
 
	// 把字节流转换为字符流
	InputStreamReader in = new InputStreamReader(fs, "GBK");// 参数1是字节流,参数2是编码
    //InputStreamReader in = new InputStreamReader(fs,"UTF-8");//参数1是字节流,参数2是编码
 
	char[] c = new char[100];
	int len = 0;
 
	while ((len = in.read(c)) != -1) {
		System.out.println(new String(c, 0, len));
	}
 
	in.close();
	fs.close();
}

OutputStreamReader:转换字节输出流为字符输出流

public static void testOutputStreamWriter() throws Exception {
	FileOutputStream out = new FileOutputStream("D:\\testdemo\\demo\\src\\day13\\tt6.txt");
 
    //OutputStreamWriter os = new OutputStreamWriter(out, "UTF-8");
	OutputStreamWriter os = new OutputStreamWriter(out, "GBK");
 
	os.write("你好你好");
	os.flush();
 
	os.close();
	out.close();
}

标准输入输出流

  • System.in(默认输入键盘):类型是InputStream
  • System.out(默认输出显示器):类型是PrintStream,是OutputStream的子类FilterOutputStream的子类

标准的输入流

public static void testSystemIn() throws Exception {
	// 创建一个接收键盘输入数据的输入流
	InputStreamReader is = new InputStreamReader(System.in);
 
	// 把输入流放到缓冲流里
	BufferedReader br = new BufferedReader(is);
 
	String str = "";// 定义一个临时接收数据的字符串
 
	while ((str = br.readLine()) != null) {
		System.out.println(str);
	}
 
	br.close();
	is.close();
}

把控制台输入的内容写到指定的TXT文件中,当接收到字符串over,就结束程序的运行

public static void write2TXT() throws Exception {
	// 创建一个接收键盘输入数据的输入流
	InputStreamReader is = new InputStreamReader(System.in);
 
	// 把输入流放到缓冲流里
	BufferedReader br = new BufferedReader(is);
 
	BufferedWriter out = new BufferedWriter(new FileWriter("D:\\testdemo\\demo\\src\\day13\\tt7.txt"));
 
	String line = "";
 
	while ((line = br.readLine()) != null) {
		if (line.equals("over")) {
			break;
		}
		// 读取的每一行都写到指定的TXT文件
		out.write(line);
	}
 
	out.flush();
	out.close();
	br.close();
	is.close();
 
}

打印流(了解)

PrintStream/PrintWriter:System.out.println等

数据流(了解):专门用来做基本数据类型的读写的

DataInputStream:数据输出流

用数据输出流写到文件的中的基本数据类型的数据,是乱码的,不能直接辨认出来,需要数据输入流来读取 DataOutputStream

public static void testDataOutputStream() throws Exception {
	DataOutputStream out = new DataOutputStream(new FileOutputStream("D:/testdemo/demo/src/day13/tt8.txt"));
 
    //out.writeBoolean(true);
	out.writeDouble(1.35d);
    //out.writeInt(100);
 
	out.flush();
	out.close();
 
}

DataOutputStream:数据输入流

如果写的时候是writeDouble,读的时候就得是readDouble DataInputStream

public static void testDataInputStream() throws Exception {
	DataInputStream in = new DataInputStream(new FileInputStream("D:/testdemo/demo/src/day13/tt8.txt"));
 
	System.out.println(in.readDouble());
 
	in.close();
}

对象流(序列化与反序列化):把一个对象转化为一个数据流进行读写

ObjectInputStream:对象的序列化

public static void testSerialize() throws Exception {
	// 定义对象的输出流,把对象的序列化之后的流放到指定的文件中
	ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:/testdemo/demo/src/day13/tt9.txt"));
 
	Person p = new Person();
	p.name = "zhangsan";
	p.age = 11;
 
	out.writeObject(p);
	out.flush();// 刷写数据到硬盘
 
	out.close();
}

ObjectOutputStream:对象的反序列化

public static void testDeserialize() throws Exception {
	// 创建对象输入流对象,从指定的文件中把对象序列化后的流读取出来
	ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:/testdemo/demo/src/day13/tt9.txt"));
 
	Object obj = in.readObject();
 
	Person p = (Person) obj;
 
	// 这个时候序列化与反序列化使用的类不是一个类分别是day13.Person和day13.test.Person
	// 这个时候反序列化就有异常day13.Person cannot be cast to day13.test.Person
    //day13.test.Person p = (day13.test.Person)obj;
 
	System.out.println(p.name);
	System.out.println(p.age);
 
	in.close();
 
}

RandomAccessFile:随意存取文件流:插入位置,读取位置,存储位置随意

  • RandomAccessFile的构造有两个参数,参数1是读写的文件的路径
  • 参数2是指定 RandomAccessFile 的访问模式
  • r: 以只读方式打开
  • rw:打开以便读取和写入
  • rwd:打开以便读取和写入;同步文件内容的更新
  • rws:打开以便读取和写入;同步文件内容和元数据的更新
  • 最常用是r和rw

随意读文件

public static void testRandomAccessFileRead() throws Exception {
	RandomAccessFile ra = new RandomAccessFile("D:/testdemo/demo/src/day13/tt10.txt", "r");
 
    //ra.seek(0);//设置读取文件内容的起始点
	ra.seek(8);// 通过设置读取文件内容的起始点,来达到从文件的任意位置读取
 
	byte[] b = new byte[1024];
 
	int len = 0;
 
	while ((len = ra.read(b)) != -1) {
		System.out.println(new String(b, 0, len));
	}
 
	ra.close();
}

随意存文件

public static void testRandomAccessFileWrite() throws Exception {
	RandomAccessFile ra = new RandomAccessFile("D:/testdemo/demo/src/day13/tt10.txt", "rw");
 
    //ra.seek(0);//设置写的起始点,0代表从开头写
	// 注意:如果是在文件开头或者中间的某个位置开始写的话,就会用写的内容覆盖掉等长度的原内容
	ra.seek(ra.length());// 设置写的起始点,ra.length()代表从文件的最后结尾写,也就是文件的追加
 
	ra.write("你好".getBytes());
 
	ra.close();
}
深入解析TI C2000 ePWM模块:峰值电流模式Buck与LLC谐振变换器实战配置 脉宽调制(PWM)技术是电力电子与数字电源控制的核心,它通过调节开关信号的占空比或频率,实现对功率变换器输出电压、电流的精确控制。其基本原理是利用微控制器内部的定时器和比较器,生成具有特定时序的方波信号,驱动功率开关器件。这项技术的核心价值在于将复杂的模拟控制环路数字化,从而提升系统的可控性、灵活性和可靠性。在电机驱动、不间断电源(UPS)、服务器电源和新能源逆变器等广泛应用场景中,PWM技术都是实现高效能量转换的基石。本文聚焦于德州仪器(TI)C2000系列微控制器中功能强大的增强型PWM(ePWM)模块 阅读详情

相关推荐

揭秘N531:这颗不到2毛钱的国产栅极驱动器,如何成为功率开关的“全能搭档”?

本文深入解析了国产栅极驱动器N531如何成为功率开关的“全能搭档”。针对MOSFET和IGBT等电压驱动器件在实际应用中需要大电流实现快速开关的核心痛点,N531凭借±500mA的强劲驱动能力、宽电压供电及高兼容性,有效降低开关损耗,提升系统效率与可靠性。文章通过实战案例与设计指南,阐述了这颗高性价比芯片在简化设计、降低成本方面的显著优势。

z5a6b的博客 620

利用Java的IO流进行文件读写操作

在上述示例中,使用`FileReader`和`FileWriter`类分别进行文件的读取和写入操作。为了提高读写的效率,使用了`BufferedReader`和`BufferedWriter`进行缓冲操作。另外,为了确保资源的正确关闭,示例中使用了`try-with-resources`语句,这样在代码块执行完毕后会自动关闭相关的流对象。请注意,这只是基本的文件读写示例,您可以根据实际需求进行更复杂的操作,例如读取和写入二进制文件、处理大文件等。在Java中,可以使用IO流进行文件的读写操作。

m0_75198698的博客 1224

科研绘图实战:用Adobe Illustrator高效排版期刊论文图片

本文详细介绍了使用Adobe Illustrator高效排版科研论文图片的完整工作流。针对期刊投稿常见的图片格式问题,文章重点讲解了矢量图与位图的预处理、AI中的精准对齐与分布技巧、文字样式统一管理以及最终输出TIFF/PDF等符合出版要求的格式。掌握这套方法能确保图片满足高分辨率、规范字体和精确尺寸等期刊硬性标准,显著提升投稿效率。

tomato的博客 1433

Java(IO输入输出) —— txt文件的读取、写入与拷贝

import java.io.*; public class Txt { public static void main(String[] args) { readFile(); writeFile(); copyFile(); } /** * 读取TXT文件内容 */ public static void readFile() { try { /*...

烟敛寒林的博客 2353

stm32 + freertos + c++混合编程方法

其他一些资料上面,c++配置成--cpp11或者-cpp 都是把工程配置成c++。三、添加cpp文件,我们调用cpp文件里面的接口函数,不需要修改main.c后缀名。2、配置工程编译时候是--c99,是因为工程里面FreeRTOS是c语言,c++模式会报错。我们这里是默认c,编写的c++文件,单独选择--cpp编译,这在后面配置!c++是面向对象编程,对于一些项目来说,c++编程更加合适!stm32cubemax配置,这里就不写了,配置资料比较多。这里就是让cpp文件在c++下编译。最后,编程成功,点亮!

yuhu0012的博客 2629

Stata极简生存分析

1. 导入数据 webuse drugtr,clear *webuse -- Use dataset from Stata website stset,clear *上一行命令导入进来的数据是“生存时间数据”,会比最原始的数据多四列,这一行命令的目的是重置为原始数据,之所以这样做,是为了显示数据处理的全部过程 codebook drug codebook studytime codebook died codebook age *codebook -- Describe data contents 2.

TOP生物信息 2336

Java中用I/O流操作读入.txt文件(面试小记)

Java读入txt文件

巴音布鲁克 921

李沐之数值稳定性+模型初始化和激活函数

层记为t,这里的y不是预测,还包括了损失函数,y是优化函数,不是预测的结果y。第t层是输出。所有的h都是一些向量,向量关于向量的导数是一个矩阵,所以用了很多次的矩阵乘法,出问题就在这里。

m0_51133942的博客 1527

读取TXT文件

作者:子谦 链接:https://www.zhihu.com/question/67344572/answer/252403722 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 TXT是一个文本文件,一般采用流的方式读取: java提供了一个FileInputStream,我们可以直接以文件路径构造这个流,也可以以文件对象构造他,如:FileInputStream fin = new FileInputStream(“d:/aa.txt”); 然后使用这个流就可以直接读取

weixin_41756354的博客 3005

Unreal5从入门到精通之如何实现移动端触屏滑动手势

随着移动设备的普及,越来越多的游戏和应用选择在移动平台上发布。Unreal Engine 5(UE5)作为一款强大的游戏引擎,提供了丰富的工具和功能,帮助开发者打造出色的移动体验。UE5不仅提升了图形质量,还大幅简化了开发流程,使得开发者能够更专注于游戏设计和用户体验。在移动游戏中,触屏滑动手势是用户与应用互动的主要方式之一。然而,许多开发者在实现这些功能时常常遇到困难。为了填补这一知识空白,本篇文章将详细介绍如何在UE5中实现移动端触屏滑动手势,帮助你从入门到精通,提升你的开发技能。

TxNet 1137

GEE高阶应用——如何绘制2000-2022年土地利用变化轨迹时序图

土地利用变化是指在一定时间范围内,土地利用类型和结构发生的变化。时序变化是指这种变化随时间的推移而发生的序列变化。土地利用变化轨迹的时序变化具体介绍如下:首先,土地利用变化轨迹的时序变化体现在土地利用类型的演变上。在过去的几十年里,随着人口的增加、经济的发展和城市化的推进,土地利用类型发生了显著的变化。传统的农田逐渐减少,而城市、工业、交通、居住等用地的面积不断扩大。同时,随着环境保护意识的提高,生态保护用地、森林、湿地等绿色用地的面积也在增加。

此星光明博客 1113

Java如何读取txt文件的内容?

io,nio

zwj1030711290的优快云 5万+

训练救星!EMA多尺度注意力让YOLOv11轻松攻克自定义数据集不涨点难题

在目标检测模型训练中,自定义数据集不涨点是阻碍算法落地的核心痛点之一。传统训练策略在数据分布特殊、样本量有限的场景下极易陷入收敛停滞,而 EMA(指数移动平均)结合多尺度注意力的方案,在自定义数据集上实现mAP 提升 6.5%,同时让训练曲线从“平缓停滞”转为“持续攀升”,彻底解决创新点在自有数据上的性能瓶颈。本教程将带你从原理到实践,通过 EMA 多尺度注意力为 YOLOv11 注入训练稳定性,让你的自定义数据集模型训练实现质的飞跃。EMA 衰减率:小样本数据集建议将decay。

FJN110的博客 160

java 获取当前路径_不用怀疑!这就是把Java.I/O流讲解的最清楚的一篇文章

推荐阅读java程序员该如何进阶?这份java中高级核心知识全面解析请收好GitHub70K+Star微服务学习笔记,实战讲解从入门到精通,爱了爱了2020年互联网企业:最详细《Java多线程编程核心技术》只做实战派本文目录简单梳理理解对于文件流来说是io流的基础,牵扯到缓冲流,缓冲流是在内存中使用io流的各类操作,转换流顾名思义,是字节与字符流之间的转换 ,要先有字节流和字符流,对象流,最主要的...

weixin_39633089的博客 72

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java 读取txt内容_不用怀疑!这就是把Java.I/O流讲解的最清楚的一篇文章

最新互联网大厂面试真题、Java程序员面试策略(面试前的准备、面试中的技巧)请访问GitHub本文目录简单梳理理解对于文件流来说是io流的基础,牵扯到缓冲流,缓冲流是在内存中使用io流的各类操作,转换流顾名思义,是字节与字符流之间的转换 ,要先有字节流和字符流,对象流,最主要的是类的序列化与反序列化,相当于一个封装转化,随机存取流,也是在有字节流和字符流的基础上。File类能新建,删除,重命名文件...

weixin_39567870的博客 137

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

接收字节流_不用怀疑!这就是把Java.I/O流讲解的最清楚的一篇文章

推荐阅读java程序员该如何进阶?这份java中高级核心知识全面解析请收好GitHub70K+Star微服务学习笔记,实战讲解从入门到精通,爱了爱了2020年互联网企业:最详细《Java多线程编程核心技术》只做实战派本文目录简单梳理理解对于文件流来说是io流的基础,牵扯到缓冲流,缓冲流是在内存中使用io流的各类操作,转换流顾名思义,是字节与字符流之间的转换 ,要先有字节流和字符流,对象流,最主要的...

weixin_42613360的博客 102

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏_不用怀疑,这就是把Java.I/O流讲解的最清楚的一篇文章...

1、I/O 软件目标设备独立性现在让我们转向对 I/O 软件的研究,I/O 软件设计一个很重要的目标就是设备独立性(device independence)。啥意思呢?这意味着我们能够编写访问任何设备的应用程序,而不用事先指定特定的设备。比如你编写了一个能够从设备读入文件的应用程序,那么这个应用程序可以从硬盘、DVD 或者 USB 进行读入,不必再为每个设备定制应用程序。这其实就体现了设备独立性的...

weixin_39836876的博客 923

万字长文详解I/O,看完再也不会怀疑人生!

Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 JDK1.4 之后出现的 NIO 技术,对比 NIO 与 BIO 的区别,然后对 NIO 中重要的三个组成部分进行讲解(缓冲区、通道、选择器),最后实现一个简易的客户端与服务器通信功能。 传统的 BIO Java IO流是一个庞大的生态环境,其内部提供了很多不同的输入流和输出流,细分下去还有字节流和字符流,甚至还有缓冲流提高 IO 性能,转换流将字节

Java圈全能架构师的博客 575

Linux磁盘I/O性能排查利器:iostat实战详解与瓶颈定位指南

性能监控是系统运维的基石,而磁盘I/O往往成为服务器性能瓶颈中最隐蔽的一环。Linux内核通过块设备统计信息反映存储健康状态,iostat作为sysstat包的核心工具,能够实时报告读写速率、I/O请求等待时间、队列长度和利用率等关键指标,帮助工程师准确判断磁盘是否饱和、请求是否排队。在数据库响应变慢、文件服务器吞吐下降、存储选型验证等典型场景中,结合await、%util等字段可快速锁定问题根源,避免在SQL优化或应用层排查上浪费时间。本文从监控原理出发,深入解析iostat常用参数与输出字段,并结合真实

weixin_34356555的博客 328

Linux 性能优化:CPU、内存、磁盘 I/O 三大瓶颈诊断与调优实战(附 top、vmstat、iostat 精通指南)

服务器突然“卡死”,SSH 都无法连接?网站响应缓慢,但不知道是 CPU、内存还是磁盘的问题?应用日志显示“Out of memory”,但free显示还有内存?数据库查询变慢,怀疑是 I/O 瓶颈?在生产环境中,性能问题往往突发且影响巨大。能否快速定位并解决,直接体现你的技术实力。据调查,80% 的性能问题源于配置不当或资源瓶颈,而非代码本身。本文将带你掌握 Linux 性能分析的“四大金刚”——topvmstatiostatsar,通过真实场景实战,精准诊断CPU、内存、磁盘 I/O。

用文字记录技术,用分享回馈社区,用坚持见证成长 2060

可能是全网最清晰的KMP算法讲解

KMP算法由D.E.Knuth,J.H.Morris和V.R.Pratt三位大神在1977年提出,它的核心算法是利用匹配失败后的信息,减少模式串与主串的匹配次数,以达到快速匹配的目的。

卡了个卡 3908

主机I/O性能测试实战指南:fio工具参数与场景应用解析

在服务器运维与存储架构优化中,I/O性能直接决定数据库、虚拟化及文件服务的稳定上限。面对业务卡顿或硬件选型,仅凭感觉难以定位瓶颈,而IOPS、带宽与延迟等量化指标才是关键依据。本文从I/O性能测试的基础概念出发,介绍fio、vdbench、ioping等主流压测工具的原理与适用场景,重点拆解fio的核心参数(如ioengine、iodepth、block size)及四类负载模型的设计方法,并结合数据库迁移、虚拟化容量规划、NAS吞吐验证等真实场景,讲解如何规避文件缓存、缓存刷写策略等常见坑点,建立可复用的

weixin_27791839的博客 154

Java NIO原理和使用

Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。 Java NIO非堵塞技术实际是采取Rea...

weixin_33688840的博客 73

Java Stream流:从声明式编程到高效数据处理实战指南

在Java开发中,数据处理是核心任务之一,传统命令式编程往往涉及繁琐的循环和临时变量管理。声明式编程范式通过抽象操作细节,让开发者更专注于业务逻辑本身,从而提升代码的可读性和可维护性。Java 8引入的Stream API正是这一思想的典型代表,它基于函数式编程理念,提供了filter、map、reduce等高级操作符,允许开发者以流水线方式组合数据转换。其底层通过惰性求值机制优化执行效率,只有终端操作触发时才会实际计算,这种设计能有效减少不必要的中间数据存储和计算开销。在技术价值上,Stream不仅简化了

330

2024年Java最全互联网高频面试题:Redis灵魂14问?问到你怀疑人生,Java攒了一个月的面试题及解答

经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示。由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取。

2301_79098686的博客 860

Linux进程状态详解:从ps、top到/proc的运维排查实战

在Linux系统运维与故障排查中,进程状态是衡量系统健康度的核心指标。理解进程从创建、就绪、运行到阻塞、退出的生命周期,掌握内核task_struct中的状态定义,是定位CPU飙高、服务假死、I/O阻塞等问题的前提。ps命令提供静态快照,top用于动态监控,而/proc文件系统则能深入进程内部,查看线程数、文件描述符及内核调用栈。本文从基础概念出发,结合真实案例,讲解R、S、D、Z等状态含义,并针对僵尸进程、kill -9无效、端口占用等高频故障给出可操作的排查命令与思路。无论你是运维新人还是开发者,都能从

weixin_34005090的博客 235
上一篇: Linux性能优化必备,看完这篇文章,彻底掌握平均负载
下一篇: Stream的终极技巧分享,一步帮你高效处理数据,阿里的大牛都在用
Java_Cappuccino
博客等级 码龄7年 17粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值