黑马程序员_IO(字符流和字节流)

基于Transformer的CFD代理模型:AeroTransformer原理、实现与优化 计算流体动力学(CFD)仿真是航空航天、汽车工程等领域的关键技术,但其高计算成本限制了设计优化效率。代理模型通过机器学习方法学习输入参数与流场输出间的映射关系,能实现秒级预测,大幅加速仿真流程。Transformer架构凭借其全局注意力机制,能有效建模流场中的长程物理关联,克服了传统卷积神经网络在捕捉全局依赖上的局限。通过预训练与微调策略,模型能先在大规模多样化数据集上学习通用流体规律,再针对特定任务快速适配,显著提升了小样本下的泛化能力与工程实用价值。AeroTransformer项目正是这一技术路线的典 阅读详情

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 

IO(字符流和字节流)

字符流

一、字符流写入

IO就是Input和Output的简写,意思就是输入输入。IO流就是Input Output流,是用来处理设备之间的数据传输。不同设备之间是要有信息传输的,IO就是处理这信息传输的。在java中,对数据操作是通过流的方法,用于操作流的对象在IO包中。

流按操作分为两种数据:字节流和字符流。

按流向分为:输出流和输入流。

在操作数据中,字节流是通用的,因为计算机中,任何数据底层就是二进制的。而字符流是基于字节流才有的,具体实现方式是,把字符变成相对应的二进制数据,然后编成一张表,这样通过二进制数据就可以查到相对应的是哪个字符,比如ACSII表,GBK,UTF,这都是编码表。

IO流中常用基类:

         字节流:InputStream(读数据)OutputStream(写数据)

         字符流:Reader(读)   Writer(写)

我们在查阅API文档的时候,就会知道,友这四个类派生的子类名称都是以这四个类的名称作为后缀名的,如:InputStream的子类,FileInputStream;Reader的子类FileReader。

关于IO流的使用,看一段代码

以操作文件为例,FileWriter

publicclass FileWriterDemo {

    publicstaticvoid main(String[] args) throws IOException {

       FileWriter fw = new FileWriter("Demo.java");

       fw.write("abcdef");

       fw.flush();

       fw.close();

    }

}

这里详细解释一下,FileWriter是Writer的一个现实子类,我们可以通过FileWriter创建对象。

FileWriter fw = new FileWriter("Demo.java");

该对象一被初始化就必须明确被操作的文件。建立对象时,会抛出IOException异常。而且该文件会被创建到指定目录下,如果该目录下已经有同名文件,那么原有文件将被覆盖,这一点要注意。其实该步骤就是明确数据要存放的目的地。

然后调用write方法写入一段数据

fw.write("abcdef");

用writer方法把字符串写入到流中。这里其实并没有把数据直接写到我们的目的地文件中,而是写入一个类似暂时存储数据的地方,这个地方就是流。

再调用flush方法,

fw.flush();

这个刷新对象中的缓冲中的数据,将数据刷入到我们制定的目的文件中。

最后我们应当关闭资源,

fw.close();

关闭流资源,但是关闭之前会刷新一次内部缓冲的数据,将数据刷到目的文件中。相比于flush方法,close刷洗后,会将流关闭,而flush刷新后则可以继续使用。

 

上面从创建流对象,到关闭流资源死条语句都会爆出异常,我们在使用这写语句的时候,要处理,不要抛出。对IO流异常的处理,这里详细描述一下。

首先,我们想到的都是用try-catch块包围语句(不算flush),因为如果我们用三个try-catch块包围三条语句的时候,当第一条语句出现错误,但这个错误被处理了,主程序会依旧执行下面的语句,而当一个流建立失败的时候,那么之后的语句是都是没有意义的,所以把三句话放到一个try-catch块中。

然后,我在考虑,如果三条语句中,如果写入语句错误抛出了异常,那么这是不管处理还是抛出,后面的关闭流动作就不会执行。我们在前面所知,运用系统资源完毕后,必须关系系统资源。所以就用到finall语句,因为这里面是必须之行的语句,所以,把关闭资源的动作放到这里来。关闭资源也有异常抛出,所以要try-catch块包围。

最后,考虑两点(其实是程序运行后,报出的异常,我们进行判断的),一是,建立流对象和写入语句都在try语句里,一旦报出异常,在finally与语句里的close就不能执行,因为流对象的引用只在try语句里,属于局部,到finally语句中就没有这个引用了。所以把引用建立在try语句之外,是引用指向为null。二、基于第一点,因为流引用的初始化为null,所以当建立流对象抛出异常时,finally里中引用调用的close方法关闭资源的动作就失败,此时引用为null,这就是null指针异常。所以要在关闭资源前,判断一下引用是否为null。

具体的程序是:

    publicstaticvoid main(String[] args) {

       FileWriter fw = null;

       try {

           fw = new FileWriter("Demo.java");

           fw.write("aabbvvdd");

       } catch (IOException e) {

           e.printStackTrace();

       }

       finally{

       try {

           if((fw!=null))

           fw.close();

       } catch (IOException e) {

           e.printStackTrace();

       }  

       }

      

    }

 

现在知道Filewriter创建对象后,如果文件不存在则会创建文件,如果文件存在则会覆盖,那么如果想在原文件上续写我们需要的数据怎么办。查阅API文档后,就会发现,我们在建立建立对象时,在文件名后面加上true后,就可以对已有文件进行续写。API中是这样写,根据给定文件名及即是是否附加写入数据的boolean值来构造FileWriter对象。示例程序:

FileWriter  fw = new FileWriter(“Demo.java”,true);

传递如一个参数true,代表不覆盖已有文件,并在已有文件的末尾进行数据续写。此时。我们在用fw.write(“heihei”),就会在原来文件上数据末尾加入这个字符串。

 

二、字符流读取

读取方式一:read,读一个

         使用Reader子类,FileReader。

同样是加你一个文件读取流对象,和指定名称的文件相关联:

         FileReader fr = new FileReader(“Demo.java”);

这里要保证该文件以及存在的,如果不存在,会发文件未找到的异常。然后调用read方法,这个方法会一次读取一个字符,而且会自动往下读,和迭代器的next有点类似。

         int ch  =  fr.read();

注意的是,一、这个方法会返回int型的值

                     二、会自动往下读

                     三、当达到文件数据末尾的时候,则返回-1。

                     四、该方法在发生异常和到达数据末尾时,会一直阻塞。这个点后面要用到。

那么我们就可以用循环的方式来读取:

                int ch;

           while ((ch= fr.read()) != -1) {

              System.out.println("ch=" + (char)ch);

           }

 

读取方式二:read(char[] ch),通过字符数组进行读取。

         将读取到的数据存入目标数组,那么建立读取流对象后,在建立一个数组

                        FileReader  fr =  new  FileReader(“Demo.java”);

                  char[] ch = new char[1024];

          因为方法返回的是int类型的值,返回的是读到的字符个数,当读取到文件最后的时候,就会返回-1。用while循环来完成。

                       int num;

           while ((ch= fr.read()) != -1) {

              System.out.println(newString(ch,0,num));

           }

       因为数据存储到数组中,所以把字符数组变成一个字符串对象,方便显示。这个方法把读取到的字符存入到字符数组中来,读取到几个,num就为几,为了打印有效位数,那么我们转成字符串的时候就用new String(ch,0,num),把字符数组中的有效位数转换成字符串。

   通常,数组的长度定为1024的整数倍。注意如果结果输出到控制台上的时候,println不要加ln,因为一旦数据超过1024,那么你在打印某个数据后,不该换行的给换行了。

如果我们要把一个盘中的文件考到另一个盘中,那么就要现在目标地方建立一个文件接收数据,用FileWriter,也要建立和原文件的连接,用FileReader,然后源文件读取,目标文件写入,这就是copy。

 

 

字符流的缓冲区

缓冲区的出现提高了对数据的读写效率。缓冲区要结合流才能使用,是在流的基础上对流的功能进行了增强。

对应类:BufferedWriter,BufferedReader

对缓冲区的理解,就是之前我们读取数据的时候,是一个一个读取,然后一个一个写入的,缓冲区就是一个一个读取后,先存到一个地方,等这个地方存了很多数据后,在一次性的写入某个文件。这样就避免的频繁的读取动作,提高了效率。

缓冲区的出现是为了提高流的操作效率,所以在创建缓冲区之前,必须要先建立流对象。

FileWriterfw = new FileWriter(“Demo.java”);

    然后将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可

    BufferdeWriterbufw = new BufferedWriter(fw);

因为缓冲区是流的子类,所以使用和流中的方法时一样的。但是要注意一点,缓冲区要记得刷新,就是使用flush方法。当我们使用close()方法时,关闭缓冲区,其实就是关闭缓冲区中的流对象。

    缓冲区中有一个新的方法,newLine(),意思就是换行。这个方法时跨平台的,通用的。

 

同样对于BufferedReader,有:

    FileReader fw = new FileReader (“Demo.java”);

BufferedReaderbufw = new BufferdeReader(fw);

但BufferedReader中有一个读取方法,readLine(),就是读一行。这个方法返回值类型为String。因为文本文件中的数据一般都是一行一行的,但不包含终止符,所以这样读取效率很高。当读取到数据末位的时候,返回为null。这样我们就可以定义一个读取方法:

    String line= null;

    while((line=bufr.readLine())!=null){

       System.out.println(line);

    }

注意:一、readLIne返回值类型为String,二,当返回值为null时,表示读到文件末尾。

 

 

IO部分涉及到装饰设计模式,参见装饰设计模式部分。

 

 

 

IO流:字符流总结:

1、     IO流,就是用来处理设备之间数据传输的。流按操作分为两种数据:字节流和字符流。按流向分为:输出流和输入流。

2、     IO流中常用基类:字节流:InputStream(读数据)OutputStream(写数据)。字符流:Reader(读) Writer(写)。

3、     字节流中通用的,字符流是在字节流的基础上,配合码表进行字符数处理的。

4、     字符中常用子类FileWriter文件写入和FileReader文件读取,字符流中的子类很好辨认,通常都会有父类名后缀,如上述两者。

5、     FileWriter是现实子类,建立对象要与目标文件相关联。特点是:会创建目标文件,即使有同名文件存在,也会覆盖同名文件。这里就要注意,如果想在已有文件上进行续写,则要在构造函数中加上true关键字:FileWriter  fr =  new  FileWriter(“Demo.java”,true)。

6、     FIleWriter写入方法为write,可写字符,字符串,字符数组。但并不是直接写入目标文件中,而是存入到流中,需再用方法flush方法刷新流,才会把数据写入到目标文件中去。

7、     FileReader建立时也要联系目标文件,读取方法为read(),但一次只会读取一个字符,且以int类型返回,读到文件数据末尾时,返回为-1,这要注意。

8、     字符流都有提高效率的缓冲区,分别为:BufferedWriter,BufferedReader

9、     BufferWriter对应Writer,会接收一个Writer的子类实例对象,有写入的方法,还一个newLine,就是换行的方法,这个方法跨平台通用。这个缓冲区,会提高原有写入的效率。

10、   BufferReader对已Reader,也接收一个Reader的子类示例对象,有读取的方法,还有另一个高效读取方法readLine,读一行的方法,且返回的是字符串,数据末尾返回null,方便操作。但是注意,不会返回结束字符,就是不会返回换行符。这个缓冲区提高了读取效率。

11、   因为ReadLIne底层实际上式对原有read方法的功能的增强,而且是传入原有功能的对象,这就是装饰设计模式。(参见设计模式之四装饰设计模式)。

12、   写程序时,如果继承父类,注意运用好父类方法,比如运用父类的构造函数,复写父类的方法等,简化代码书写,提高书写效率。

13、   非常重要的是:记得要关闭流资源!!!!方法close()。

14、   进行异常处理是要注意把close方法放到finally语句中,因为关流也抛异常,所以也要用try-catch包围,关流前要判断流对象引用是否为空,否则会抛出空指针异常。

15、   注意read方法时阻塞式的方法,就是说如果读到数据中间,后面的因为某种情况暂读取,则会一直处于阻塞状态。

 

 

 

 

 

 

 

 

 

 

字节流

一、字节流概述

除了文本格式的文件,一般像音频、视频、图片等数据,都是字节码数据,这就用到了IO中字节流的两个基类:InputStream   OutputStream。注意一点,前者是读取,后者是写入,要明确了。

字节流中,操作数据的方法和字符流一致,也有相应的子类,FileInputStream和FileOutputStream,通过建立对象和目标文件相连接,也有相应的write和read方法。和字符流不同的是,write和read方法的重载方法,有接受数组参数的,这里的数组都是byte型的数组。同时,字节流没有flush方法,就是说,数据会直接写入到目标文件中去,不用刷新流,但必须关闭资源。在FileInputStream中,有一个方法available,这个方法会返回目标文件的数据长度,为int型。当我们要用read方法,把数据写入一个数组中,一般定义数据长度为1024,有这个方法后,就可以定义文件长度的数组,但要慎用:具体程序为:

         //建立一个原数据长度的byte型数组

byte[ ] buf =new byte[ fis.available ];

//数组长度一次性满足,直接读取到数组中,就不用循环了

         fis.read(buf);

         System.out.println(newString(buf);

我们通常做法是建立1024长度的数组,进行循环读取。这里省略循环,但是一旦数组长度过长,比如我们要读取一个电影文件,这个电影文件数据太长,当我建立这个长度的数组超过内存大小的时候,就gameover了。所以,要注意available的使用环境,数据量不大的时候使用。

字节流也有缓冲区,对应的是BufferedInputStream,BufferedOutputStream。使用方法和字符流中的一致。这里就不赘述了。说一点模拟字节流缓冲区BufferedInputStream的方法。

我想要模拟缓冲区,先了解缓冲区是怎么工作原理的,大致步骤是这样的:1、将数据从硬盘上取出,这部有FileInputStream完成,2、将读取的数据存入缓冲区,我们模拟时将用数组代替,3、将数组中的数据一个个的返回。下面就看程序:

class MyBuffered {

    //首先最为装饰类,要接受原有功能的对象

    private FileInputStream in  ;

    MyBuffered(FileInputStream in){

       this.in=in;

    }

    //定义接收从硬盘上取到的数据的数组

    byte[] buf = newbyte[1024];

    /*

     定义指针和计数器。原因:一、我们自定义读取方法时用到read方法直接把数据存入数组,

     返回的是int类型的数值,用count记录,所以从数组中往外读取过程中, count不断减少,

     当见到0时,就意味着数组中的数据读取完毕。

     二、读取数据时,要从前往后读取,所以要有指针,以便我们返回数据

     */

    intpos=0,count=0;

    //自定义read方法

    publicint MyRead() throws IOException{

       if(count==0){

       count=in.read(buf);

       //这里注意,一旦数组读取完毕,再读入一组数据时,要把指针归零

       pos=0;

           if(count<0){

              return -1;

           }

       byte b = buf[pos];

       count--;

       pos++;

       //这里进行与运算,将在下面讲到。

       return b&255;

       }

       elseif(count>0){

           byte b = buf[pos];

           count--;

           pos++;

           return b&255;

       }

       return -1;   

    }

    publicvoid myClose() throws IOException{

       in.close();

    }

}

这样一个自定义的缓冲区就形成了。注意一点是,返回int值是,与了一个值255。这里解释一下,也是一个小知识点:

    read方法返回值为-1的时候,写入的循环程序就会终止。因为字节流每一次会读到一个字节,当我们把字节数据用int类型返回是,这里就有一个自动提升类型的动作。如果我们第一字节读到的是11111111,这个值是-1,当作为int型返回时,会有以前的一个八位变为四个八位:

11111111—->变为:

11111111-11111111-11111111-11111111

就是说,它会补上1,这样在int类型中,这个数据还是-1,所以就造成了循环可能在某个地方或一开始就会结束,导致文件没有被复制或数据不全。如果我们在前面补0,那么就可以保留原有字节部分数据不变,又可以避免-1出现。那么我们就可以对int数据与上255:

11111111-11111111-11111111-11111111

& 00000000-00000000-00000000-11111111

-------------------------------------------

00000000-00000000-00000000-11111111

这样返回的就不是-1了,而且write方法写入的时候,会自动把前面3个八位去掉,这样,理解起来就更容易了,因为我们改动返回的int值,只要最后八位和原始字节数据时一致的就可以了。

 

 

二、字节流特殊部分

1、读取键盘录入,转换流

    首先知道两点:System.out对应标准输出设备,即控制台。

              System.in对应标准输入设备,即键盘

System.in返回的是InputStream。所以连接动作是:InputStreamin = System.in。

然后我们用字节流中的方法读取键盘录入即可。但是我们在使用中,需要进行判断,判断换行符号,有换行符号我们才可以打印数据到控制台。判断换行符,\r\n,的动作其实不就是readLine方法么。所以,就用到下一个方法:

读取转换流:InputStreamReader,字节通向字符的桥梁,接收一个字节读取流

这个类可以把字节流转换为字符流。程序如下:

字节流读取键盘

InputStream in = System.in;

转换流转为字符流,接受一个InputStream对象

InputStreamReader isr = new InputStreamReader(in);

既然是字符流,就可以用字符流的装饰类,BufferReader

BufferedReader br = BufferedReader(isr);

剩下的读取方式就和字符流的做法一直,循环判断,最后关流即可。

写入转换流:OutputStreamWriter,字符通向字节的桥梁,接受一个字节输出流

这个类可以把字符流转换位字节流。程序如下:

连接控制台

OutpurStream out = System.in;

转换流转为字符流,接受一个OutpurStream对象

OutputStreamWriter isr = new OutputStreamWriter(out);

既然是字符流,就可以用字符流的装饰类,BufferReader

BufferedWriter br = BufferedWriter(isr);

剩下的读取方式就和字符流的做法一直,循环判断,最后关流即可。

 

流操作的基本规律和思路:

流既然是操作设备之间信息传输的,那么就要明确信息来源和信息目的。

首先:明确信息源。

    信息源有两点:字节类的InputStream     字符类的Reader

其次:明确目的。

    信息去往目的:字节类的OutputStream    字符类的 Writer

再次:明确操作数据类型

    字符流    或      字节流

再次:明确使用哪个对象

    源的对象:

键盘(System.in),硬盘(一般是FileInputStream和FileReader),内存

    目的对象:

控制台(System.out),硬盘(一般是FileOutputStream和FileWriter),内存

最后:是否要提高效率

    字符:BufferedReader   BufferedWriter

    字节:BufferedInputStream  BufferedOutputStream

 

转换流的拓展:

现在的需求是,想要把录入的数据按照指定的编码表UTF-8,将数据存到文本文件中。

按照上面流操作的基本规律来说:

源是读取,InputStream   Reader

目的是输出,OutputStream  Writer

是文本文件  Writer

设备硬盘,FileWriter  设备键盘,InputStream。

提高效率BufferedWriter

其实在转换流中有默认的编码表,这样我们才可以把字节转换为相应的字符。系统中的FileWriter是使用默认编码表GBK。但是我们存储时,需要加入指定编码表UTF-8,而指定的编码表只有转换流可以指定。所以要使用的对象是OutputStreamWriter。而该转流对象还要接收一个字节输出流,而且可以操作文件的字节输出流,FileOutputStream。

则有:OutputStreamWriterosw =

new OutputStreamWriter(new FileOutputStream(”Demo.java”),”UTF-8”);

这就在写入的时候按照UTF-8的编码表输入。

 

那InputStreamReader来说,它是Reader的子类,InputStreamReader的子类是FileReader,FileReader可以直接读取文件,它的默认编码就是系统的默认编码,中国内一般都是GBK。如果想改变编码表的话,就的用到FileReader的父类InputStreamReader转换流,在转换流中才可以使用更改数据流入流出的编码表。

当然编码表也有不同,就像GBK是3字节的,UTF-8是4字节的。

 

改变标准输入输出

System中,的out表示标准输出,in表示输入,System.out即是控制台,System.in即是键盘。但这个默认的标准输出和输入时可以改变的。System.setIn(newFIleInputStream(“文件名”)),这个方法接受的是一个InputStream类型的对象,当在调用System.in时,输入设备就改变成那个文件了。System.setOut(PrintStreamout),这里接收的就是PrintStream的对象,而这个对象时OutputStream的子类,有一个可接收文件名的构造函数,这样建立新对象就可以改变原有标准输出,再调用System.out,标准输出就以一个文件了。

 

 

IO流字节流的总结:

1、  字节流,就是操作除了文本格式文件之外的数据,比如音频视频等数据。这些数据都是字节码文件。

2、  字节流两个基类:InputStream(读取)OutputStream(写入)

3、  同字符流相一致的是,也有操作文件的子类,同样也是read和write方法,但注意相关于数组的都是byte类型的数组。

4、  字节流没有flush方法,就是说数据会直接写到目标文件中去,不必刷新流,但必须关闭资源。

5、  字节流也有自己的装饰类,对应的是BufferedInputStream和BufferedOutputStream,注意没有读一行的方法了。其他基本使用方法和字符流一致。

6、  掌握模拟装饰类的思路和方法,小知识点是,read读取到11111111时的处理方式。因为从byte到int会自动提升类型,而且前3个八位补的是1,所以会返回-1。所以要与255,是返回值部位-1,可保留原有数据,也可实现我们定义的循环。write方法写入的时候,会自动去掉前3个八位。

7、  字符流重要部分:转换流。对应的是,InputStreamReader和OutputStreamWriter。InputStreamReader接收的是InputStream对象,OutputStreamWriter接受的是OutputStream对象,都是字节流对象。但其本身都是字符流的子类,所以可以使用字符流的装饰类。当然就可以使用字符装饰类中的方法了。使用BufferedWriter时要注意刷新流。

8、  操作流的基本操作规律:明确信息源和目的,是字节类的还是字符类的。明确设备,是键盘硬盘还是内存。明确操作数据,是字节还是字符。明确是否提高效率,是还是否。

9、  转换流的拓展,我们可以再读取和写入的时候,加入指定编码表,否则就是默认编码表。添加编码表只能是在转换流中使用,这一点要注意。相对应的,比如FileReader是InputStreamReader的子类,虽然FileReader可以直接读取文件的数据,但是只能按默认编码表。

10、             注意,装饰类(缓冲区),可以基类一下的子类,不要只局限与FileReader等例子之上。

11、             System中改变标准输入输出设备,用setIn和setOut,但是setOut需是PrintStream的对象。改变标准后,仍使用System.out和System.in。

 

芒果YOLOv12改进13:独家原创改进最新 CFNet 核心结构|即插即用 | 首发改进显著提升检测性能,小目标检测涨点必备 阅读详情

相关推荐

高德地图JS API私有化部署实战:从数据爬取到内网集成

本文详细介绍了高德地图JS API私有化部署的完整流程,涵盖从地图瓦片数据爬取、JS API离线化改造到内网项目集成的实战步骤。重点解决了在封闭内网环境中实现地图功能的核心难题,并提供了Vue.js项目中的具体集成代码与调试技巧,帮助开发者在离线环境下构建稳定可靠的地图应用。

weixin_29062255的博客 318

Java IO流

File 文件类概述和构造方法 File:它是文件和目录路径名的抽象示 文件和目录是可以通过File封装成对象的 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已.它可以是存在的,也可以是不存在的. 将来是要通过具体的操作把这个路径的内容转换为具体存在的 字节流 字符流 特殊操作流 ...

STATICHIT静砸的博客 820

DAC60501与STM32的I2C通信实战:从寄存器配置到电压输出

本文详细介绍了如何使用STM32通过I2C通信驱动DAC60501数模转换器,实现精确的模拟电压输出。内容涵盖从硬件连接到软件模拟I2C驱动编写,再到DAC寄存器配置与电压计算的全流程实战指南,并提供了关键的驱动实例代码和常见问题调试技巧,帮助开发者快速掌握这一嵌入式开发中的实用技能。

weixin_29197835的博客 367

Java学习之字符流

一、I/O流中的编码解码 OutputStreamWriter:把字节输出流转换为字符输出流 InputStreamReader:把字节输入流转换为字符输入流 二、转换流 一般情况下使用系统默认得码表 写入数据,把字节输出流转换为字符输出流(不指定码表) OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStre

RookieThree的博客 328

c语言版数据结构课程设计 学生成绩管理系统

此学生成绩管理系统完成15项功能,是我经过很多次的修改得到的。花费时间不短,功能齐全,主要完成了:输入,输出,插入,修改,删除,查询,读取文件,写入文件,复制文件,建立索引,显示各种情况下的信息,追加学生信息等等功能。一共15项。   代码如下: // shujujiegou.cpp : 定义控制台应用程序的入口点。///**本程序采用数组链表形式,原因:数组查询速度快,数组也能实现动态存储

Java 1万+

黑马程序员——IO流-字节流、字符流

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------ -------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

u011477144的专栏 397

无感无刷电机控制进阶:反电动势过零检测的5种实现方案对比

本文深入探讨无感无刷电机控制中反电动势过零检测的5种实现方案,包括电阻分压虚拟中性点法、专用BEMF检测IC方案、基于ADC采样的数字锁相环、无传感器观测器技术及混合方案创新实践。通过对比分析各方案的优劣及适用场景,为电机控制工程师提供实用的技术选型指南,助力提升系统性能与成本效益。

weixin_28691741的博客 845

黑马程序员——java的IO之字符流,字节流,转换流

---------android培训、java培训、java学习型技术博客、期待与您交流!----------- 1.IO概述 1、相关概念:IO:即Input和Output的缩写。 2、作用和特点:        1)IO流用来处理设备间的数据传输。设备包括内存和磁盘等.        2)Java对数据的操作是通过流的方式。        3)Java用于操作流的对象都在IO包中。

hgdswj的博客 933

弥散圆以及最大弥散圆

1弥散圆的形成? 原本景物中的一点应该经过透镜本应该也是一点才对。但是因为离焦,球差的存在,最终成像会投影成一个光斑圆圈。越小越清晰,越大就互相干涉变得越模糊。 同时人们规定二零最大弥散圆,就是人眼能够感受清晰模糊的一个边界,直径大于它,感受到模糊;直径小于它,感受不到模糊。 下面分别是离焦(左),球差(右)。 2弥散圆大小怎么计算呢? ,f为焦距;<1> ,D为光圈有效孔径;<2> F=f/D; <3> 3条公式合并可得出: ...

camerall 3117

YOLOv11改进,YOLOv11添加DCNv4可变性卷积(windows系统成功编译),二次创新C3k2结构,全网最详细教程

引入了可变形卷积 v4 (DCNv4),这是一种为广泛视觉应用设计的高效且有效的操作算子。DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以最小化冗余操作,从而加速计算。这些改进使得DCNv4相比DCNv3显著加快了收敛速度,并且处理速度大幅提升,前向传播速度超过三倍。DCNv4在多个任务中表现出色,包括图像分类、实例和语义分割,特别是在图像生成方面表现突出。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2665

黑马程序员——IO流:字节流,字符流及键盘录入

------- android培训、java培训、期待与您交流! ---------- IO流 概述:1,IO流用来处理设备间的数据传输。       2,Java对数据的操作是通过流的方式。       3,Java用于操作流的对象都在IO包中。       4,流按操作数据分为两种:字节流和字符流。       5,流按流向分为:输入流和输出流。 注意:流只能操作数据,而不能操作

Jiaming84的博客 773

量子化学仿真软件:VASP_(9).磁性材料计算

在量子化学仿真软件 VASP 中,磁性材料的计算是一个复杂但重要的过程。通过正确设置磁性状态、分析磁性性质、优化计算参数以及研究磁性相变和磁动力学,可以更准确地描述和预测磁性材料的性能。希望本节的内容能够为研究磁性材料的科研人员提供有用的参考和指导。

kkchenjj的博客 1375

黑马程序员_IO_字符流与字节流

------- android培训、java培训、期待与您交流! ----------   IO流--字符流。 IO流用来处理设备之间的数据。java对数据的操作是通过流的方式进行的java用于操作的流对象都在IO包中 流按照操作数据分为字节流和字符流流按照流向分为输入流和输出流。 为什么有字符流的存8在? 大写A 65  小写 a 97 ASCII码中的编码形式汉字的编码 是GB

qq_26089797的博客 341

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

黑马程序员——IO字符流与字节流

------- android培训、java培训、期待与您交流! ----------   IO流         Java中的IO操作用来处理设备间的数据传输。IO流按流向可分为输入流和输入流;而按操作的数据可分为字节流和字符流。起初先有有字节流,后来为了方便人们操作,将字节编码制成了编码表,由此在字节流的基础上利用编码表而产生了字符流。         Java的IO流中主要由四个

RyanYoung的专栏 695

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

黑马程序员——IO流——字节流,字符流

 ------http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

fuxiaoyuqing的专栏 445

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

黑马程序员——Java IO字符流、字节流(小练习)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

sgd111111的专栏 464

黑马程序员——Java中IO流(字节流 字符流 其他流 )

IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在io包中   IO体系:   流按操作数据        |---字节流(InputStream   OutputStream)        |---字符流(Reader   Writer)   流按流向        |---输入流        |---输出流 字节流两个基

InsistOwn的博客 686

黑马程序员——Java字符流、字节流IO流

黑马程序员——Java字符流、字节流Io流 ---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ---------------------- 一、IO流的概念       1.程序中所有的数据都是以流的形式输入或保存的,程序需要数据的时候用输入读取流,要保存一些数据用输出流完成       2.java中对数据的操作是通过流的方式

hg_yingshan的专栏 870

黑马程序员——IO流之IO流概述、字符流、字节流

------- android培训、java培训、期待与您交流! ---------- 一、IO流的概述 1、常识 IO流用来处理设备之间的数据传输。 Java对数据的操作是通过流的方式。 Java用于操作流的对象都在IO包中(java.io)。 在编写IO相关代码是,需先导入java.io.*;或者其中相关的类。 2、分类 流按流向分为:输入流,输出流。 流按操作数据

youngheiying的博客 529

黑马程序员——Java基础IO(一)——IO流概述、字符流、字节流、流操作规律

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律 第一讲 IO概述 一、IO(Input Output)流 1.IO流用来处理设备之间的数据传输 2.Java对数据的操作是通过流的方式 3.Java用于操作流的对象都在IO包中

ch2219532232的专栏 800

黑马程序员——IO流(IO流、字节流、字符流)

------- android培训、java培训、期待与您交流! ---------- 第一讲     IO流 概述 1、IO流:即InputOutput的缩写。 2、特点:         1)IO流用来处理设备间的数据传输。         2)Java对数据的操作是通过流的方式。         3)Java用于操作流的对象都在IO包中。

永恒的博客 389

黑马程序员_IO流1_(IO流概述,字符流,字节流,FileWriter,FileReader)

------- android培训、java培训、期待与您交流! ---------- 一.IO流 1.IO(Input Output)流 1)IO流用来处理设备之间的数据传输。 2)  java对数据的操作是通过流的方式。 3)java用于操作流的对象都在IO包中。 4)流按操作数据分为两种:字节流和字符流. (1)字符流:方便处理文本数据。 (2)编码表:国际统一码表

xiewei的专栏 548

黑马程序员——IO流(三)字节流、字符流、转换流

------- android培训、java培训、期待与您交流! ---------- 一、字节流和字符流    字节流是以InputStream和OutputStream为基类的一系列类,是对字节的直接操作。而字符流(Reader、Writer),需要根据系统的码表做一些转义操作。字符流更着重于文本的操作。   二、带缓冲区的字节流原理     缓冲输入流中定义一个字节数组来存放读

PoetKing 929

黑马程序员-IO流 字符流与字节流

------- android培训、java培训、期待与您交流! ---------- IO流就是处理设备之间的数据传输 java对数据的操作是通过流的方式,操作流的对象基本都在IO包中。 IO流分为字符流和字节流。 字节流的抽象基类: InputStream  OutputStream 字符流的抽象基类: Writer  Reader 字符流: //写入流: //创

I Can 509

黑马程序员—IO流(上)字符流、字节流

----------android培训、java培训、期待与您交流!---------- 1.字符流和字节流体系 2.字符流和字节流的区别 二者仅仅是操作单位不一样。 InputStream和Reader是所有输入流的基类,OutStream和Writer是所有输出流的基类,他们都是抽象类,本身不能创建实例,但是他们是所有输入流的模板。 一般来说处理字符或字符串时使用

w13774591947的专栏 452
上一篇: 黑马程序员_File和Properties概述
下一篇: 黑马程序员_GUI概述
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值