Java基础(IO输入输出流,读写文件操作,对象序列化)

2023-10-27

IO

输入输出流基本概念

输入流:信息从程序空间之外的地方流入程序空间里面

输出流:信息从程序空间里面流到程序空间之外的地方

输入输出流的分类

  • 从流的方法划分

    • 输入流
    • 输入流
  • 从流的分工划分

    • 节点流:访问文件进行输入输出操作的流
    • 处理流:在节点流的基础之上对信息进行加工转换处理的流
  • 从流的内容划分

    • 面向字符的流:专门处理字符数据
    • 面向字节的流:用于一般目的即输入输出

在这里插入图片描述

所有的输入输出流类都继承于以上四个类

  • 面向字符的流的超类为Reader&Writer

  • 面向字节的流的超类为InputStream&OutputStream

举一个简单的例子,复制一个文件的内容到另一个文件中

首先在该项目的文件所在位置新建一个Redirecting.txt文件

import java.io.*;

public class Redirecting {
    public static void main(String[] args) throws FileNotFoundException {
        BufferedInputStream in = new BufferedInputStream(
                new FileInputStream("Redirecting.txt")); 
        //FileInputStream就是一个面向字节的流,然后再通过BufferedInputStream来转化,
        //BufferedInputStream也是一个流,是一个缓冲流
        PrintStream out = new PrintStream(new
                BufferedOutputStream(new FileOutputStream("test.txt")));
        System.setIn(in); 
        //将输入流重定向到Redirecting文件中,相当于本来我们是从键盘输入,现在变成从文件来输入
        System.setOut(out);
        //将输出流重定向到test.txt文件中,本来应该是输出到显示器上,现在输出到test文件中
        System.setErr(out);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //BufferedReader是一个面向字符的流,因为BufferedReder只处理信息,但是不读取信息
        //因此我们需要用一个InputStreamReader来从文件中读取信息,再由BufferedReader转换
        String s;
	    while((s=br.readLine())!=null)
		    System.out.println(s);
            //因为我们已经输出流定向到test.txt文件中了,所以我们这里相当于复制的操作
	    in.close();
	    out.close();
    }
}

写文本文件

import java.io.*;

public class FileWriterTester {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String fileName = "Hello.txt";
        FileWriter writer = new FileWriter(fileName);
        writer.write("Hello World!");
        writer.close();
    }
}

如果有大量的信息要写入文件,可以使用BufferedWriter

import java.io.*;

public class FileWriterTester {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String fileName = "Hello.txt";
        BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
        //跟前面说的一样,BufferedWriter也不直接对文件信息进行读取,它只处文件信息
        //因此我们需要用一个FileWriter来读取文件,再转换为BufferedWriter
        out.write("Hello World!");
        out.newLine(); //跨平台的换行,\n不一定在各个平台都是换行
        out.close();
    }
}

读文本文件

import java.io.*;

public class FileWriterTester {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String fileName = "Hello.txt";
        BufferedReader in = new BufferedReader(new FileReader(fileName));
        //使用BuffereReader类可以按行读取
        String c = in.readLine();
        while(c!=null)
        {
        	System.out.println(c);
        	c=in.readLine();
        }         	
    }
}

Reader类有一个read方法,返回文件中字符的ASCLL码

import java.io.*;

public class FileWriterTester {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        String fileName = "Hello.txt";
        FileReader in = new FileReader(fileName);
        //前面的BuffereReader类也有read方法
        int c;
        while((c=in.read())!=-1)
        	System.out.print((char)c);     	
    }
}

写二进制文件

写二进制文件用到的类为DataOutputStream,继承于OutputStream,有一个派生类为FileOutputStream,这一个类只针对输入输出而DataoutPutStream可以写入各种类型的数据

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputstreamTester {

    public static void main(String[] args) throws FileNotFoundException, IOException{
            // TODO Auto-generated method stub
            String fileName = "test.dat";
            DataOutputStream out = new DataOutputStream(
                    new FileOutputStream(fileName));
            //用FileOutputStream转换为DataOutputStream
            out.writeByte(-1);
            out.writeByte(2);
            out.writeInt(5);
            out.writeBytes("Hello World");
            out.close();
        }
    }
}

同理,为了加快写入速度,我们可以使用BufferedOutputStream

DataOutputStream out = new DataOutputStream(
			new BufferedOutputStream(
					new FileOutputStream(fileName)));

读二进制文件

import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputstreamTester {

    public static void main(String[] args) throws FileNotFoundException, IOException{
        // TODO Auto-generated method stub
        String fileName = "test.dat";
        DataOutputStream out = new DataOutputStream(
                new BufferedOutputStream(
                        new FileOutputStream(fileName)));
        out.writeByte(-1);
        out.writeByte(2);
        out.close();
        int sum=0;
        try
        {
            DataInputStream in = new DataInputStream(
                new BufferedInputStream(new FileInputStream("test.dat")));
            //读二进制文件用的是DataInputStream,同时使用BufferedInputStream提高读取速度
            try
            {
                while(true)
                {
                    sum+=in.readUnsignedByte();
                }
                    
            }
            catch(EOFException eof)  //如果读到文件尾,就会抛出异常
            {
                System.out.println("The sum is:"+sum);
                in.close();
            }
        }
        catch(IOException iox) //文件读取的异常
        {
            System.out.println("IO Problems with"+fileName);
        }
    }
}

输出结果为257,因为我们读取的是无符号数in.readUnsignedByte(),如果改成in.readByte(),那么结果就是1

注意: 写二进制文件时,我们一般只在一个文件写入一种类型的数据,而且得用文档记录起来

一个拷贝文件的例子

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyBytes {
    public static void main(String[] args) throws IOException{
        if(args.length!=2)
            return;
        DataInputStream instr;
        DataOutputStream outstr;
        instr = new DataInputStream(new BufferedInputStream
                (new FileInputStream(args[0]))); //源文件
        outstr = new DataOutputStream(new BufferedOutputStream
                (new FileOutputStream(args[1])));//目标文件
        int c;
        try 
        {
            while(true)
            {
                c = instr.readUnsignedByte(); //读取源文件的字符
                outstr.writeByte(c); //写入目标文件中
            }          
        } 
        catch (EOFException eof) //读到文件为抛出异常,关闭文件
        {
            // TODO Auto-generated catch block
            outstr.close();
            instr.close();
            return;
        }
    }
}

这里我们用的是args来传递参数的,顺便说一个args的值从哪里来

  1. 在空白区点击右键(鼠标光标所在的地方),然后找到Run As

在这里插入图片描述

  1. 在Arugments里边写入args的参数,由空格分隔

在这里插入图片描述

运行之后就能发现文件被复制成功了

File类

File类用于创建文件,比较常用的方法由File.exits(),File.delete()

import java.io.*;
public class FileTester {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File f = new File("hello.txt");
        if(f.exists())
            f.delete();
        else
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
}

如果hello.txt文件存在,就会被删除,否则就建立一个新的文件

压缩和解压缩Gzip文件

跟前面的类似,我们使用GZIPInputStreamGZIPOutputStream这两个类来实现

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GZIPTester {

    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("Hello.txt");
        GZIPOutputStream out = new GZIPOutputStream(
                new FileOutputStream("test.gz"));
        //使用GZIPOutputStream作为输出流
        System.out.println("Writing compressing file from Hello.txt to test.gz");
        int c;
        while((c=in.read())!=-1)
            out.write(c);
        //一个一个字符的写入
        in.close();
        out.close();
    }
}

解压缩test.gz文件

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GZIPTester {

    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("Hello.txt");
        GZIPOutputStream out = new GZIPOutputStream(
                new FileOutputStream("test.gz"));
        System.out.println("Writing compressing file from Hello.txt to test.gz");
        int c;
        while((c=in.read())!=-1)
            out.write(c);
        in.close();
        out.close();
        System.out.println("Reading file from test.gz to monitor");
        BufferedReader in2 = new BufferedReader(new InputStreamReader(
                new GZIPInputStream(new FileInputStream("test.gz"))));
        //使用GZIPInputStream来作为输入流,再使用InputSteamReader来作为面向字节到面向字符的桥梁
        String s;
        while((s=in2.readLine())!=null)
            System.out.println(s);
        //输出解压缩后的文件内容
        in2.close();

也可以通过将压缩文件的内容直接写入文件实现解压缩

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GZIPTester {

    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("Hello.txt");
        GZIPOutputStream out = new GZIPOutputStream(
                new FileOutputStream("test.gz"));
        System.out.println("Writing compressing file from Hello.txt to test.gz");
        int c;
        while((c=in.read())!=-1)
            out.write(c);
        in.close();
        out.close();
        System.out.println("Reading file from test.gz to monitor");
        BufferedReader in2 = new BufferedReader(new InputStreamReader(
                new GZIPInputStream(new FileInputStream("test.gz"))));
        String s;
        while((s=in2.readLine())!=null)
            System.out.println(s);
        in2.close();
        System.out.println("Writing decompression to newHello.txt");
        GZIPInputStream in3 = new GZIPInputStream(
                new FileInputStream("test.gz"));
        FileOutputStream out2 = new FileOutputStream("newHello.txt");
        while((c=in3.read())!=-1)
            out2.write(c);
        //一个一个字节的写
        in3.close();
        out2.close(); 
    }
}

也可以把多个文件压缩到一个文件中去,也就是Zip文件

我们使用ZipOutputStream类来实现

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ZipOutputStreamTester {

    public static void main(String[] args) throws IOException {
        ZipOutputStream out = new ZipOutputStream(
                new BufferedOutputStream(
                        new FileOutputStream("test.zip")));
        //使用ZipOutputStream作为输出流
        for(int i=0; i<args.length; i++) //多个文件
        {
            System.out.println("Writing file"+args[i]);
            BufferedInputStream in = new BufferedInputStream(
                    new FileInputStream(args[i]));
            out.putNextEntry(new ZipEntry(args[i]));
            //把文件的开始标记写到压缩文件里边去
            int c;
            while((c=in.read())!=-1)
                out.write(c);
            in.close();
        }
        out.close();
    }
}

解压缩Zip文件使用ZipInputStream类来实现

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ZipOutputStreamTester {

    public static void main(String[] args) throws IOException {
        System.out.println("Reading file!");
        ZipInputStream in2 = new ZipInputStream(
                new BufferedInputStream(
                        new FileInputStream("test.zip")));
        //使用ZipInputStream来定义输入流
        ZipEntry ze;
        while((ze=in2.getNextEntry())!=null) //获取文件入口
        {
            System.out.println("Reading file"+ze.getName());
            int x;
            while((x=in2.read())!=-1)
                System.out.write(x);
            //将文件内容输出
            System.out.println();
        }
        in2.close();
    }
}

上面我们只是将压缩文件输出而已,我们更希望将压缩文件解压为一个一个的文件,下面我们来实现这一功能

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Unzip {
	byte doc[] = null;
	String Filename = null;
	String UnZipPath = null;
	public Unzip(String filename, String unZipPath) //构造函数初始化文件名和压缩路径
	{
		this.Filename = filename;
		this.UnZipPath = unZipPath;
		this.setUnZipPath(this.UnZipPath);
	}
	public Unzip(String filename)
	{
		this.Filename = new String(filename);
		this.UnZipPath = null;
		this.setUnZipPath(this.UnZipPath);
	}
	private void setUnZipPath(String unZipPath)//统一在路径名后面加上\\
	 { 
		if(unZipPath.endsWith("\\"))
			this.UnZipPath=new String(unZipPath);
		else
			this.UnZipPath=new String(unZipPath+"\\");
	}
	public void doUnzip()
	{
		try
		{
			ZipInputStream zipis = new ZipInputStream(
					new FileInputStream(Filename));
			//用ZipInputStream定义输入流
			ZipEntry fEntry = null;
			//文件入口,可以参考前面的压缩文件操作
			while((fEntry=zipis.getNextEntry())!=null)//压缩包中的文件是否解压缩完
			{
				if(fEntry.isDirectory()) //如果文件是一个路径,检查该文件是否存在,不存在就新建
					checkFilePath(UnZipPath+fEntry.getName());
				else
				{
					String fname = new String(UnZipPath+fEntry.getName()); //拼接路径名
					try
					{
						FileOutputStream out = new FileOutputStream(fname);
						doc=new byte[512]; //一次性读取512个字节,加快读取效率
						int n;
						while(((n=zipis.read(doc,0,512))!=-1)) //如果文件没有512字节,那么n就是字节个数
							out.write(doc, 0, n);
						out.close();
						out=null;
						doc=null;
					}
					catch(Exception ex)
					{}
				}
			}
			zipis.close();		
		}
		catch(IOException ioe)
		{
				System.out.println(ioe);
		}
	}
	private void checkFilePath(String dirName) { //检查文件是否存在,不存在就新建
		// TODO Auto-generated method stub
		File dir = new File(dirName);
		if(!dir.exists())
			dir.mkdir();	
	}
	public static void main(String[] args) {
		String zipFile=args[0];
		String unZipPath = args[1]+"\\";
		Unzip myZip=new Unzip(zipFile,unZipPath);
		myZip.doUnzip();
	}
}

ps:如果报错文件夹拒绝访问,可以去属性那里添加用户权限,百度找一下方法

对象序列化

对象序列化就是将对象的值保存到文件中,因为一个对象在程序的存活时间不长

使用的类为ObjectInputStreamObjectOutputStream

  • 不保存对象的transientstatic类型的变量
  • 对象要实现序列化,其所属的类必须实现Serializable接口(Serializable接口只是一个标记,里边没有声明任何方法原型)

下面一个程序实现将一个对象的值存入文件,再读取出来

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class SerializableTester {

    public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
        // TODO Auto-generated method stub
        Book book = new Book(10032,"ComupterNetworking"); 
        //实例化一个对象,Book可以直接定义,在其他文件或同一文件下
        ObjectOutputStream oos = new ObjectOutputStream(
                new FileOutputStream("book.dat"));
        //使用ObjectOutputStream作为输出流
        oos.writeObject(book);
        oos.close();
        book = null;
        ObjectInputStream ois = new ObjectInputStream(
                new FileInputStream("book.dat"));
        //同上
        book = (Book)ois.readObject(); 
        //readObject可以得到对象的值,注意文件中保存对象的类型必须直接记录
        ois.close();
        System.out.println(book.id);
        System.out.println(book.name);
    }

}
ObjectOutputStream oos = new ObjectOutputStream(
                new FileOutputStream("book.dat"));
        //使用ObjectOutputStream作为输出流
        oos.writeObject(book);
        oos.close();
        book = null;
        ObjectInputStream ois = new ObjectInputStream(
                new FileInputStream("book.dat"));
        //同上
        book = (Book)ois.readObject(); 
        //readObject可以得到对象的值,注意文件中保存对象的类型必须直接记录
        ois.close();
        System.out.println(book.id);
        System.out.println(book.name);
    }

}

参考

清华大学Java教程p67-p77

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

Java基础(IO输入输出流,读写文件操作,对象序列化) 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • python requests cookies怎么转为_如何将requests.RequestsCookieJar转换为字符串

    新答案 好吧 所以我还是不知道你到底想达到什么目的 如果您想从requests RequestCookieJar对象中提取原始url 这样您就可以检查是否与给定的子域匹配 这是 据我所知 不可能的 不过 你也可以做些类似的事情 usr bi
  • Linux-线程的同步与互斥

    线程的同步与互斥 进程 线程间的互斥相关背景概念 互斥量 互斥量接口 互斥量的初始化 互斥量的销毁 加锁和解锁 改善抢票系统 互斥量原理 可重入与线程安全 重入和线程安全的概念 常见线程不安全情况 常见线程安全的情况 常见不可重入情况 常见
  • 【软件工程】-可行性研究报告

    GB8567 88 可行性研究报告 1引言 1 1编写目的 为了提高机房收费管理的灵活性和效率 减轻机房工作人员的工作负担 节约时间 对机房收费业务做到快速准确管理的目的 从而降低人力 经济的更各方面的消耗 本次编写主要是为了分析廊坊师范学
  • 电机速度曲线规划1:梯形速度曲线设计与实现

    电机驱动是很常见的应用 在很多系统中我们都会碰到需要改变电机的速度以实现相应的控制功能 这就涉及到电机速度曲线规划的问题 在这篇中我们就来简单讨论一下电机的梯形曲线规划的问题 1 基本原理 梯形速度曲线控制算法是工业控制领域应用最为广泛的加
  • 在vc下环境变量的设置

    Error spawning cl exe 编译出错 有人说是没有设置 include环境变量 下面介绍在vc下如何设置环境变量 1 Microsoft Visual Studio下面3个子文件夹 Common VC98 My Projec
  • 1.嵌入式控制器EC学习,编译环境搭建

    工欲善其事 必先利其器 在学习EC相关知识之前 首先需要完成EC代码编译环境的搭建 需要如下内容 Keil C51 用于EC中C代码的编译器环境 EC源代码 我们使用从网上可以下载到的 ITE V12 4 Update 版的代码为例进行学习
  • JavaBean,List,Map转成json格式

    普通JavaBean 以User为例 转成json格式 1 转成JSONArray类型 User user new User user setUsername cxl user setPassword 1234 JSONArray json
  • GORM 基础 -- Gen

    https gorm io gen github 1 GEN Guides GEN 友好和更安全的代码生成 1 1 概述 来自动态原始SQL的惯用和可重用API 100 类型安全的DAO API 不使用 interface Database
  • printf(“%d,%d\n“,i--,i++)

    sample cpp include
  • Windows 下创建定时任务执行Python脚本

    文章目录 一 环境 二 脚本 三 创建定时任务 1 打开 任务计划程序 2 打开 创建任务 窗口 3 创建任务一一常规 4 创建任务一一触发器 5 创建任务一一操作 6 创建任务一一条件 7 创建任务一一设置 8 完成任务创建 四 验证定时
  • 记录自己在结构光三维重建领域的学习过程(一)

    仿真数据集与真是数据集之间差异较大 二者的网络均不可完美预测另一种数据 寻找解决办法 首先确定是不是数据的问题 阅读论文 Light field structured light projection data generation wit
  • 关于存储过程中SQL语句IN条件传参注意说

    背景说明 在数据库操作中我们经常会用到查询语句 在一些情况下 需要使用到IN条件 正常的查询中IN需要注意的是最好in中的参数不能超过1000个 超过1000的时候oracle会抛出异常 这个如何处理先不提 这次要说的是 如果在存储过程中使
  • 某单位分配到一个地址块 136.23.12.64/26。现在需要进一步划分为4个一样大的子网。试问:

    1 每个子网的网络前缀有多长 2 每个子网中有多少个地址 3 每个子网的地址块是什么 4 每一个子网可分配给主机使用的最小地址和最大地址是什么 姐
  • JS中的邮箱验证

    通过js在前端对用户输入进行校验 即可以产生较好的交互体验 也可以减轻后台的压力 邮箱的基本格式要求 1 只能以单词字符开头 即a z A Z 0 9 2 只能有一个 3 后面有一个到多个点 并且点不能在最后 4 特殊字符不能开头和结尾 使
  • 数据存储,详细讲解

    数据存储 详细讲解 数据类型的介绍 整形的内存存储 大小端介绍 浮点数的存储 数据类型的介绍 1 内置类型 char 字符数据类型 1 short 短整型 2 int 整形 4 long 长整型 4 8 long long 更长的整形 8
  • matlab之数组反序输出

    a 1 2 3 4 5 a end 1 1 5 4 3 2 1 转载于 https www cnblogs com yibeimingyue p 11201805 html
  • 高阶数据结构之并查集

    文章目录 并查集 并查集的常规实现 并查集的简化实现 算法题 模板 朴素的并查集 维护size的并查集 维护到祖宗节点的并查集 并查集 在某些应用问题中 需要将n个不同的元素划分成一些不想交的集合 开始时 每个元素自成一个单元集合 然后按照
  • 一文搞懂状态模式

    原理 状态机有三个组成部分 状态 事件 动作 遇到不同的事件会触发状态的转移和动作的执行 不过动作不是必须的 可能只有状态的转移 没有动作的执行 状态模式的目的就是实现状态机 案例带入 比如 超级马里奥 在游戏中 马里奥可以变身为多种形态
  • 抖音究竟对线下生意有没有价值?

    戳上方增长黑盒Growthbox点亮星标 深度研究不错过 主笔 邹小困 研究员 彬超 Emma 出品 增长黑盒研究组 01 防火防盗防抖音 互联网世界的后起之秀字节跳动 如同进击的巨人 在短短几年内就已将业务的触角伸向各个领域 图为chat
  • Java基础(IO输入输出流,读写文件操作,对象序列化)

    IO 输入输出流基本概念 输入流 信息从程序空间之外的地方流入程序空间里面 输出流 信息从程序空间里面流到程序空间之外的地方 输入输出流的分类 从流的方法划分 输入流 输入流 从流的分工划分 节点流 访问文件进行输入输出操作的流 处理流 在