当前位置: 首页 > news >正文

Java高级(十一)

Java高级(十一)

  • 一、缓冲流
    • 1.1概述
    • 1.2字节缓冲流
      • 字节缓冲输出流
      • 字节缓冲输入流
    • 1.3字符缓冲流
      • 字符缓冲输出流
      • 字符缓冲输入流
  • 二、转换流
    • 2.1字符编码和字符集
      • 字符编码
      • 字符集
    • 2.2 InputStreamReader类
    • 2.3OutputStreamWriter类
  • 三、序列化
    • 3.1概述
    • 3.2ObjectOutputStream类
    • 3.3 ObjectInputStream类
  • 四、打印流
    • 4.1概述
    • 4.2PrintStream类

一、缓冲流

1.1概述

缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流,按照数据类型分类:
字节缓冲流BufferedInputStream ,BufferedOutputStream
字符缓冲流BufferedReaderBufferedWriter
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO 次数,从而提高读写的效率。

1.2字节缓冲流

字节缓冲输出流

java.io.BufferedOutputStream extends FilterOutputStream
BufferedOutputStream:字节缓冲输出流

构造方法:
BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
BufferedOutputStream(OutputStream out, int size)创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。

具体使用内容如下:

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;/*java.io.BufferedOutputStream extends FilterOutputStreamBufferedOutputStream:字节缓冲输出流继承自父类的共性成员方法:public void close() :关闭此输出流并释放与此流相关联的任何系统资源。public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输 出到此输出流。public abstract void write(int b) :将指定的字节输出流。构造方法:BufferedOutputStream(OutputStream out)创建一个新的缓冲输出流,以将数据写入指定的底层输出流。BufferedOutputStream(OutputStream out, int size)创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。参数:OutpurSteam out:字节输出流我们可以传递FileOutputStream,缓冲流会给FileOutputStream增加一个缓冲区,提高FileOutputStream的写入效率int size:指定缓冲流内部缓冲区的大小使用步骤(重点)1.创建FileOutputStream对象,构造方法中绑定要输出目的地2.创建BufferedOutputStream对象,构造方法中传递FileOutputStream对象,提高FileOutputStream对象效率3.使用BufferedOutputStream对象中的方法write,把数据写入内部的缓冲区中4.使用BufferedOutputStream对象中的方法flush,把内部缓冲区中的数据,刷新到文件中5.释放资源(会先调用flush方法刷新数据)*/
public class Demo01BufferedOutputStream {public static void main(String[] args) throws IOException {//1.创建FileOutputStream对象,构造方法中绑定要输出目的地FileOutputStream fos = new FileOutputStream("/Users/wangjue/IdeaProjects/day09-IO/a.txt");//2.创建BufferedOutputStream对象,构造方法中传递FileOutputStream对象,提高FileOutputStream对象效率BufferedOutputStream bos = new BufferedOutputStream(fos);//3.使用BufferedOutputStream对象中的方法write,把数据写入内部的缓冲区中bos.write("我把数据写入到内部缓冲区中".getBytes());//4.使用BufferedOutputStream对象中的方法flush,把内部缓冲区中的数据,刷新到文件中bos.flush();//5.释放资源(会先调用flush方法刷新数据,第四步可以省略)bos.close();}
}

字节缓冲输入流

java.io.BufferedInputStream extends InputStream
BufferedInputStream:字节缓冲输入流

构造方法:
BufferedInputStream(InputStream in)创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。
BufferedInputStream(InputStream in, int size)创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。

具体实现内容如下:

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;/*java.io.BufferedInputStream extends InputStreamBufferedInputStream:字节缓冲输入流继承自父类的成员方法:int read() : 从输入流读取数据的下一个字节。read(byte[] b): 从输入流读取一些字节数,并将它们存储到缓冲区 b 。read(byte[] b, int off, int len):从输入流读取最多 len字节的数据到一个字节数组。void close()构造方法:BufferedInputStream(InputStream in)创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。BufferedInputStream(InputStream in, int size)创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。参数:InputStream:字节输入流我们可以传递FileInputStream,缓冲区会给FileInputStream增加一个缓冲区,提高FileInputStream的读取效果int size:指定缓冲流内部缓冲区的大小,不指定默认使用步骤(重点):1.创建FileInputStream对象,构造方法中绑定要读取的数据源2.创建BufferedInputStream对象,构造方法中传递FileInputStream对象,提高FileInputStream对象的读取效率3.使用BufferedInputStream对象中的方法read,读取文件4.释放资源*/
public class Demo02BufferedInputStream {public static void main(String[] args) throws IOException {//1.创建FileInputStream对象,构造方法中绑定要读取的数据源FileInputStream fis = new FileInputStream("/Users/wangjue/IdeaProjects/day09-IO/a.txt");//2.创建BufferedInputStream对象,构造方法中传递FileInputStream对象,提高FileInputStream对象的读取效率BufferedInputStream bis = new BufferedInputStream(fis);//3.使用BufferedInputStream对象中的方法read,读取文件//int read() : 从输入流读取数据的下一个字节。
//        int len = 0; //记录每次读取到的字节
//        while ((len = bis.read()) != -1){
//            System.out.println(len);
//        }//read(byte[] b): 从输入流读取一些字节数,并将它们存储到缓冲区 b 。byte[] bytes = new byte[1024]; //存储每次读取的数据int len = 0; //记录每次读取的有效字节个数while ((len = bis.read(bytes)) != -1){System.out.println(new String(bytes, 0, len));}//4.释放资源bis.close();}
}

1.3字符缓冲流

字符缓冲输出流

java.io.BufferedWriter extends Writer
BufferedWriter:字节缓冲输出流

构造方法:
BufferedWriter(Writer out)创建使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz)创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。
参数:
Writer out:字节输出流
我们可以传递FileWriter,缓冲会给FileWriter增加一个缓冲区,提高FileWriter的写入效率
int sz:指定缓冲区的大小

具体内容实现如下:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;/*java.io.BufferedWriter extends WriterBufferedWriter:字节缓冲输出流继承自父类的共性成员方法:void write(int c) 写入单个字符。void write(char[] cbuf) 写入字符数组。abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len 写的字符个数。void write(String str) 写入字符串。void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。void flush() 刷新该流的缓冲。 void close() 关闭此流,但要先刷新它。构造方法:BufferedWriter(Writer out)创建使用默认大小的输出缓冲区的缓冲字符输出流。BufferedWriter(Writer out, int sz)创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。参数:Writer out:字节输出流我们可以传递FileWriter,缓冲会给FileWriter增加一个缓冲区,提高FileWriter的写入效率int sz:指定缓冲区的大小特有的成员方法:void newLine()行行分隔符。会根据不同的操作系统获取不同的行分隔符。使用步骤:1.创建字符缓冲输出流对象,构造方法中传递字符输出流2.调用字符缓冲输出流中的方法write,把数据写入到内存缓冲区中3.调用字符缓冲输出流中的方法flush,把内存缓冲区中的数据,刷新到文件中4.释放资源*/
public class Demo03BufferedWriter {public static void main(String[] args) throws IOException {//1.创建字符缓冲输出流对象,构造方法中传递字符输出流BufferedWriter bw = new BufferedWriter(new FileWriter("/Users/wangjue/IdeaProjects/day09-IO/a.txt"));//2.调用字符缓冲输出流中的方法write,把数据写入到内存缓冲区中for (int i = 0; i < 10; i++) {bw.write("www");
//            bw.write("\r");bw.newLine();}//3.调用字符缓冲输出流中的方法flush,把内存缓冲区中的数据,刷新到文件中bw.flush();//4.释放资源bw.close();}
}

字符缓冲输入流

java.io.BufferedReader extends Reader

构造方法:
BufferedReader(Reader in)创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)创建使用指定大小的输入缓冲区的缓冲字符输入流。
参数:
Reader in:字符输入流
我们可以传递FileReader,缓冲流会给FileRead增加一个缓冲区,提高FileReader的读取效率

具体实现内容如下:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;/*java.io.BufferedReader extends Reader继承自父类的共性成员方法:int read():读一个字符int read(char[] cbuf)将字符读入数组。close()关闭流并释放与之相关联的任何系统资源。构造方法:BufferedReader(Reader in)创建使用默认大小的输入缓冲区的缓冲字符输入流。BufferedReader(Reader in, int sz)创建使用指定大小的输入缓冲区的缓冲字符输入流。参数:Reader in:字符输入流我们可以传递FileReader,缓冲流会给FileRead增加一个缓冲区,提高FileReader的读取效率特有的成员方法:String	readLine()读一行文字。行终止符号: 一行被视为由换行符('\ n'),回车符('\ r')中的任何一个或随后的换行符终止。返回值:包含行的内容的字符串,不包括任何行终止字符,如果已达到流的末尾,则为null使用步骤:1.创建字符传冲输入流对象,构造方法中传递字符输入流。2.使用字符缓冲流对象中的read/readline读取文本3.释放资源*/
public class Demo04BufferedReader {public static void main(String[] args) throws IOException {//1.创建字符传冲输入流对象,构造方法中传递字符输入流。BufferedReader br = new BufferedReader(new FileReader("/Users/wangjue/IdeaProjects/day09-IO/a.txt"));//2.使用字符缓冲流对象中的read/readline读取文本
//        String line = br.readLine();
        System.out.println(line);
        String line2 = br.readLine();
        System.out.println(line);
        String line3 = br.readLine();
        System.out.println(line);/*发现以上读取是一个重复的过程,所以可以使用循环优化不知道文件中有多少行数据,所以使用while循环while的结束条件,读取到null结束*/String line;while((line = br.readLine()) != null){System.out.println(line);}//3.释放资源br.close();}
}

二、转换流

2.1字符编码和字符集

字符编码

计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制 数转换之后的结果。按照某种规则,将字符存储到计算机中,称为编码 。反之,将存储在计算机中的二进制数按照 某种规则解析显示出来,称为解码 。比如说,按照A规则存储,同样按照A规则解析,那么就能显示正确的文本f符 号。反之,按照A规则存储,再按照B规则解析,就会导致乱码现象。
字符编码 Character Encoding : 就是一套自然语言的字符与二进制数之间的对应规则。

字符集

字符集Charset:也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符 号、数字等。

在这里插入图片描述

2.2 InputStreamReader类

转换流 java.io.InputStreamReader ,是Reader的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定 的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。
java.io.InputStreamReader extends Reader
InputStreamReader:是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符。(编码:把不能看懂的变成能看懂的)

构造方法:
InputStreamReader(InputStream in)创建一个使用默认字符集的InputStreamReader。
InputStreamReader(InputStream in, String charsetName)创建一个使用命名字符集的InputStreamReader。

具体代码实现如下:

import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;/*java.io.InputStreamReader extends ReaderInputStreamReader:是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符。(编码:把不能看懂的变成能看懂的)继承自父类的共性成员方法:int read():读一个字符int read(char[] cbuf)将字符读入数组。close()关闭流并释放与之相关联的任何系统资源。构造方法:InputStreamReader(InputStream in)创建一个使用默认字符集的InputStreamReader。InputStreamReader(InputStream in, String charsetName)创建一个使用命名字符集的InputStreamReader。参数:InputStream out:字节输入流,用来读取文件中保存的字节。String charsetName:指定的编码表名称 UTF-8,GBK...默认UTF-8使用步骤:1.创建InputStreamWriter对象,构造方法中传递字节输入流和指定的编码表名称2.使用InputStreamWriter对象中的read,读取文件。3.释放资源注意事项:构造方法中指定的编码表名称要和文件的彪马相同,否则会发生乱码*/
public class Demo03InputStreamReader {public static void main(String[] args) throws IOException {
//        read_utf_8();read_gbk();}/*使用InputStreamReader读取UTF-8格式的文件*/private static void read_gbk() throws IOException {//1.创建InputStreamWriter对象,构造方法中传递字节输入流和指定的编码表名称InputStreamReader isr = new InputStreamReader(new FileInputStream("/Users/wangjue/IdeaProjects/day09-IO/a.txt"), "GBK");
//        InputStreamReader isr = new InputStreamReader(new FileInputStream("/Users/wangjue/IdeaProjects/day09-IO/a.txt"), "UTF-8");//2.使用InputStreamWriter对象中的read,读取文件。char[] chars = new char[1024];int len = 0;while((len = isr.read(chars)) != -1){System.out.println(new String(chars, 0, len));}//3.释放资源isr.close();}/*使用InputStreamReader读取UTF-8格式的文件*/private static void read_utf_8() throws IOException {//1.创建InputStreamWriter对象,构造方法中传递字节输入流和指定的编码表名称InputStreamReader isr = new InputStreamReader(new FileInputStream("/Users/wangjue/IdeaProjects/day08-IOAndProperties/c.txt"), "UTF-8");//2.使用InputStreamWriter对象中的read,读取文件。char[] chars = new char[1024];int len = 0;while((len = isr.read(chars)) != -1){System.out.println(new String(chars, 0, len));}//3.释放资源isr.close();}
}

2.3OutputStreamWriter类

java.io.OutputStreamWriter extends Writer
OutputStreamWriter:是字符流通字节流的桥梁:可以使用指定的 charset 类型将要写入的字符编码成字节。(编码:把能看懂的变成看不懂的)

构造方法:
1.OutputStreamWriter(OutputStream out)创建一个使用默认字符编码的OutputStreamWriter。
2.OutputStreamWriter(OutputStream out, String charsetName)创建指定字符集的OutputStreamWriter。

具体代码实现如下:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;/*java.io.OutputStreamWriter extends WriterOutputStreamWriter:是字符流通字节流的桥梁:可以使用指定的 charset 类型将要写入的字符编码成字节。(编码:把能看懂的变成看不懂的)继承自父类的共性成员方法:void write(int c) 写入单个字符。void write(char[] cbuf) 写入字符数组。abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len 写的字符个数。void write(String str) 写入字符串。void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。void flush() 刷新该流的缓冲。 void close() 关闭此流,但要先刷新它。构造方法:1.OutputStreamWriter(OutputStream out)创建一个使用默认字符编码的OutputStreamWriter。2。OutputStreamWriter(OutputStream out, String charsetName)创建指定字符集的OutputStreamWriter。参数:OutputStream out:字节输出流,可以用来写转换之后的字节到文件中。String charsetName:指定的编码表名称 UTF-8,GBK...默认UTF-8使用步骤:1.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称2.使用OutputStreamWriter对象中的write,把字符转换为字节存储到缓冲区中。3.使用OutoutStream对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)4.释放资源*/
public class Demo02OutputStreamWriter {public static void main(String[] args) throws IOException {write_gbk();}/*使用转换流OutputStreamWriter写GBK格式的文件*/private static void write_gbk() throws IOException {//1.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("/Users/wangjue/IdeaProjects/day09-IO/a.txt"),"GBK");//2.使用OutputStreamWriter对象中的write,把字符转换为字节存储到缓冲区中。osw.write("你好");//3.使用OutoutStream对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)osw.flush();//4.释放资源osw.close();}/*使用转换流OutputStreamWriter写UTF-8格式的文件*/private static void write_utf_8() throws IOException {//1.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("/Users/wangjue/IdeaProjects/day09-IO/a.txt"),"UTF-8");//2.使用OutputStreamWriter对象中的write,把字符转换为字节存储到缓冲区中。osw.write("你好");//3.使用OutoutStream对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)osw.flush();//4.释放资源osw.close();}
}

三、序列化

3.1概述

Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该 对象的数据对象的类型对象中存储的属性 等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。 反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化对象的数据对象的类型对象中存储的数据 信息,都可以用来在内存中创建对象。看图理解序列化:

在这里插入图片描述

3.2ObjectOutputStream类

java.io.ObjectOutputStream 类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。

java.io.ObjectOutputStream extends OutputStream
ObjectOutputStream:对象的序列化流
作用:把对象以流的方式写入到文件中保存

构造方法:
ObjectOutputStream(OutputStream out):创建一个写入指定的OutputStream的ObjectOutputStream。

特有的成员方法:
void writeObject(Object obj)将指定的对象写入ObjectOutputStream。

具体实现内容如下:
Person类:

import java.io.Serializable;/*序列化和反序列化的时候,会抛出NotSerializableException没有序列户异常类的序列化由实现java.io.Serializable接口的类启用。 不实现此接口的类将不会使任何状态序列化或反序列化。Serializable接口也叫标记性接口要进行序列化和反序列化的类必须实现Serializable接口,就会给类添加标记当我们进行序列化和反序列化的时候,就会检测类上是否有标记有:序列化和反序列化没有:会抛出NotSerializableException没有序列户异常static:静态关键字静态优先于非静态加载到内存中(静态优先于对象进入到内存中)被static修饰的成员对象是不能被序列化的,序列化的都是对象private static int age;oos.writeObject(new Person("小美女", 18));obj = ois.readObject();Person{name='小美女', age=0}trainsient关键字:瞬态关键字被trainsient修饰的成员变量不,能被序列化private trainsient int age;oos.writeObject(new Person("小美女", 18));obj = ois.readObject();Person{name='小美女', age=0}*/
public class Person implements Serializable {private static final long serialVersionUID = 1L;private String name;
//    private static int age;
//    private transient int age;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}

ObjectOutputStream测试类

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;/*java.io.ObjectOutputStream extends OutputStreamObjectOutputStream:对象的序列化流作用:把对象以流的方式写入到文件中保存构造方法:ObjectOutputStream(OutputStream out):创建一个写入指定的OutputStream的ObjectOutputStream。参数:OutputStream out:字节输出流特有的成员方法:void writeObject(Object obj)将指定的对象写入ObjectOutputStream。使用步骤:1.创建ObjectOutputStream对象,构造方法中传递字节输出流2.使用ObjectOutputStream对象中的writeObject,写入对象3.释放资源*/
public class Demo01ObjectOutputStream {public static void main(String[] args) throws IOException {//1.创建ObjectOutputStream对象,构造方法中传递字节输出流ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/Users/wangjue/IdeaProjects/day09-IO/a.txt"));//2.使用ObjectOutputStream对象中的writeObject,写入对象oos.writeObject(new Person("小美女", 18));//3.释放资源oos.close();}
}

3.3 ObjectInputStream类

java.io.ObjectInputStream extends InputStream
ObjectInputStream:对象的反序列化流
作用:把文件中保存的对象,以流的方式读取出来使用

构造方法:
ObjectInputStream(InputStream in)创建从指定的InputStream读取的ObjectInputStream。
参数:
InputStream in:字节输入流
特有的成员方法:
readObject()从ObjectInputStream读取一个对象。

具体实现内容如下:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;/*java.io.ObjectInputStream extends InputStreamObjectInputStream:对象的反序列化流作用:把文件中保存的对象,以流的方式读取出来使用构造方法:ObjectInputStream(InputStream in)创建从指定的InputStream读取的ObjectInputStream。参数:InputStream in:字节输入流特有的成员方法:readObject()从ObjectInputStream读取一个对象。使用步骤:1.使用ObjectInputStream对象,构造方法中传递字节输入流2.使用ObjectInputStream对象中的方法readObject读取保存对象中的文件3.释放资源4.使用读取出来的对象(打印出来)readObject方法声明抛出了ClassNotFoundException(找不到class文件)当不存在对象的class文件时抛出异常反序列化的前提:1.类必须实现Serializable2.必须存在类对象的class文件
*/
public class Demo02ObjectInputStream {public static void main(String[] args) throws IOException, ClassNotFoundException {//1.使用ObjectInputStream对象,构造方法中传递字节输入流ObjectInputStream ois = new ObjectInputStream(new FileInputStream("/Users/wangjue/IdeaProjects/day09-IO/a.txt"));//2.使用ObjectInputStream对象中的方法readObject读取保存对象中的文件Object obj = new Object();obj = ois.readObject();//3.释放资源ois.close();//4.使用读取出来的对象(打印出来)System.out.println(obj);Person o = (Person) obj;System.out.println(o.getName() + " " + o.getAge());}
}

四、打印流

4.1概述

平时我们在控制台打印输出,是调用 print方法和 println 方法完成的,这两个方法都来自于java.io.PrintStream类,该类能够方便地打印各种数据类型的值,是一种便捷的输出方式。

4.2PrintStream类

具体实现内容如下:

import java.io.FileNotFoundException;
import java.io.PrintStream;/*java.io.PrintStream:打印流PrintStream为另一个输出流添加了功能,即能够方便地打印各种数据值的表示。PrintStream特点:1.只负责数据的输出,不负责数据的输入;2.与其他输出流不同,PrintStream永远不会抛出IOException3.有特有的方法,print,printlnprint(任意数据类型)println(任意数据类型)构造方法:PrintStream(File file):输出的目的地是一个文件PrintStream(OutputStream out):输出的目的地是一个字节输出流PrintStream(String fileName):输出的目的地是一个文件路径继承自父类的成员方法:public void close() :关闭此输出流并释放与此流相关联的任何系统资源。public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输 出到此输出流。public abstract void write(int b) :将指定的字节输出流。注意:如果使用继承自父类的write方法写数据,那么查看数据的时候会查询码表97->a如果使用自己特有的方法print/println方法写数据,写的数据原样输出 97->97*/
public class Demo01PrintStream {public static void main(String[] args) throws FileNotFoundException {//创建打印流PrintStream对象,构造方法中绑定要输出的目的地PrintStream ps = new PrintStream("/Users/wangjue/IdeaProjects/day09-IO/a.txt");//如果使用继承自父类的write方法写数据,那么可以查看数据的时候会查询码表 97->aps.write(97);//如果使用自己特有的方法print/println方法写数据,写的数据原样输出 97-> 97ps.println(97);//释放资源}
}

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

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

学生成绩管理系统+打包

文章目录文件管理&#xff1a;D:\hyt\python\pytorch_graduate\file_management成绩管理&#xff1a;D:\hyt\python\pytorch_graduate\stusystem打包&#xff1a;D:\hyt\python\pytorch_graduate\package_test学生成绩管理系统0.基础原理1.文件管理2 学生管理系统Tk打包1.基础原…...

Yocto Build with Bitbake的调试

https://docs.yoctoproject.org/dev-manual/common-tasks.html#recipe-logging-mechanisms 官方文档里有输出调试信息的方法。包含两种&#xff0c;一种是调用python的&#xff0c;一种是bash的。 建议直接使用warning方法&#xff0c;保证输出级别足够。 另外&#xff0c;在…...

Ways to Encrypt Password on Server

Background: the history of store password in server, starts with plain text, to MD5, SHA-1, SHA-2, to add salt/pepper/multihashing, to bcrypt/Argon2id etc. Best way so far to encrypt password on server : use bcrypt(unless have specific reasons not to do...

IntentService源码分析指南

转载链接&#xff1a;https://www.jianshu.com/p/8a3c44a9173a...

为啥集群小文件治理那么重要,你真的懂吗?

小文件是 Hadoop 集群运维中的常见挑战&#xff0c;尤其对于大规模运行的集群来说可谓至关重要。如果处理不好&#xff0c;可能会导致许多并发症。Hadoop集群本质是为了TB,PB规模的数据存储和计算因运而生的。为啥大数据开发都说小文件的治理重要&#xff0c;说HDFS 存储小文件…...

Flink大数据实时计算系列-第一个程序JAVA版本-分组统计

Flink大数据实时计算系列-第一个程序JAVA版本-分组 在基线版本上增加了分组统计的代码 #Flink代码 package com.flinkniu.flink.operator;import org.apache.flink.api.common.typeinfo.Types; import org.apache.flink...

boost::geometry::model::multi_polygon用法的测试程序

boost::geometry::model::multi_polygon用法的测试程序 实现功能C++实现代码实现功能 boost::geometry::model::multi_polygon用法的测试程序 C++实现代码 #include <algorithms/area/test_area.hpp> #include <boost/geometry/geometries/geometries.hpp> #inc…...

Ant Design Vue实现a-table表格单元格合并

Ant Design Vue实现a-table表格单元格合并 参考Ant design Vue官网关于行和列合并api https://antdv.com/components/table-cn/ 下面官网对表格合并这块的描述 &#xff01;&#xff01;&#xff01;注意注意注意重要事情说三遍&#xff1a;很多同学都习惯性的将columns写在d…...

【CoppeliaSim】Solidworks中模型导出模型到V-REP

一、下载安装插件 插件名称&#xff1a;sw2urdfSetup 下载地址&#xff1a;https://github.com/ros/solidworks_urdf_exporter/releases/tag/1.6.0 下载后直接安装即可。安装成功后&#xff0c;可在SolidWorks的菜单栏中看到&#xff1a;工具-Tools-Export as URDF 二、导出…...

css中id和class的区别

css中id和class的区别ID是唯一的类不是唯一的语法区别ID是唯一的 每个元素仅可以有一个ID每个页面仅可以有一个元素拥有这个ID 类不是唯一的 你可以在多个元素中使用相同的类你可以使用多个类在一个元素中 语法区别 id对应css是用样式选择符“#”&#xff08;井号&#xff…...

程序员如何快速成长

如何快速成长 每个程序员都是从菜鸟成长过来&#xff0c;我自己也不例外。以下是我个人一些总结和结合网上别人的经验&#xff0c;希望对大家有帮助&#xff01; 主动学习 保持危机感 35岁后你能做什么&#xff1f;为何同龄人已经是行业专家&#xff1f; 对知识保持好奇心 多…...

力扣刷题:动态规划篇

目录322. 零钱兑换题目介绍题目实现5. 最长回文子串题目介绍题目实现518. 零钱兑换 II题目介绍题目实现53. 最大子序和题目介绍题目实现63. 不同路径 II题目介绍[62. 不同路径](https://leetcode-cn.com/problems/unique-paths/)题目实现70. 爬楼梯题目介绍题目实现72. 编辑距离…...

Java面试list 和 set 区别

List和Set的区别 List:&#xff1a;有序&#xff0c;按对象进入的的序保存对象&#xff0c;可可允许多个Null元素对象&#xff0c;可以使用lterator迭取出所有元素。在逐一便历&#xff0c;也可以使用get(int index)获取指定下标的元素 Set&#xff1a;无序&#xff0c;不可重复…...

诚意分享:这里有份超全Java体系化进阶学习图谱

摘要 Apache Kafka是一个分布式消息发布订阅系统。它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log)&#xff0c;之后成为Apache项目的一部分。 成千上万的企业都在使用Kafka&#xff0c;三分之一的世界500强公司也在其中&…...

基于51单片机的温度报警系统

目录 前言 一、温控系统是什么&#xff1f; 二、设计目的 1.环境需求 2.设计基础 三、设计 1.C51程序设计 2.Proteus仿真 &#xff08;1&#xff09;.元器件如下 &#xff08;2&#xff09;.原理图。 总结 前言 微型计算器自20世纪70年代诞生以来&#xff0c;得以迅…...

requests+re爬取猫眼电影排行

import requests from requests.exceptions import RequestException import re,json,timedef get_one_page(url):#获取网页信息try:headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/53…...

Twitter教程:如何下载Twitter数据副本?

Twitterrific Mac破解版是一款非常现代化优秀的桌面Twitter客户端,这款软件不仅看起来惊人,它的表现也是非常棒的,本文给大家的带来了如何下载Twitter数据副本的教程。 教程如下 在 iPhone 或 iPad 上打开“Twitter”。&#xff08;您也可以使用 Twitter.com 网站&#xff09…...

4-1 Python常用内置算法与数据结构常考题

一、你使用过哪些常用内置算法和数据结构 仔细回想一下你用过哪些内置的算法数据结构&#xff1f; 1.sorted 2.dict/list/set/tuple… 3.问题&#xff1a;想的不全或者压根没了解和使用过 数据结构/算法语言内置内置库线性结构list(列表)/tuple(元组)array(数组&#xff0c;不…...

【内网学习笔记】8、powercat 的使用

1、下载安装 powercat powercat 可以视为 nc 的 powershell 版本&#xff0c;因此也可以和 nc 进行连接。 powercat 可在 github 进行下载&#xff0c;项目地址为&#xff1a;https://github.com/besimorhino/powercat 下载下来 powercat.ps1 文件后&#xff0c;直接导入即可…...

栈和队列(二) : 用栈实现队列

leetcode232.用栈实现队列 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 使用栈实现队列的下列操作&#xff1a; push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。…...

hashcode与HashMap

hashcode是对象在hash表中对应的位置. 而hash可能会发生hash冲突,所以可能存在不同对象hashcode是相同的. class Solution {public static void main(String[] args) {Integer a 223;Integer b 223;System.out.println(a b);System.out.println(a.hashCode() b.hashCode()…...

vmmap分析内存泄露问题

vmmap是sysinternals工具集中的一个工具&#xff0c;主要用于分析一个进程的虚拟内存和物理内存的使用情况。更有效的是&#xff0c;可以通过对比两个不同时间的内存使用情况的Snapshot&#xff0c;来查找内存泄露问题。 vmmap介绍 当你用vmmap去查看一个正在运行的进程的时候…...

图谱问答-句子向量模型部署项目总结(未完)

内容来自七月算法nlp课程。 文章目录1 句子向量1.1 bert句子向量表示相似度效果不好1.2 sentence-bert1 句子向量 句子向量是用于实体消岐的。可以使用Elmo&#xff0c;也可以使用bert。这里介绍用bert生成句子向量。 1.1 bert句子向量表示相似度效果不好 Bert中最常用的句向…...

Unity行为树插件Behavior Tree Designer记录.Decorator装饰2

ReturnFailure The return failure task will always return failure except when the child task is running. 子Task运行期间将一直返回失败。主要重载了Decorate函数。在父类中的意义是申请改变子Task的状态。从代码上看也是这样&#xff0c;子Task的状态是成功&#xff0c…...

PCA原理使用PCA拟合平面

PCA原理&使用PCA拟合平面 背景 本文参考以下两篇平面解析的论文: 《Fast Plane Extraction in Organized Point Clouds Using Agglomerative Hierarchical Clustering》 《Fast Cylinder and Plane Extraction from Depth Cameras for Visual Odometry》 知识回顾&…...

三维点集拟合:平面拟合、RANSAC、ICP算法

三维点集拟合&#xff1a;平面拟合、RANSAC、ICP算法 一、拟合一个平面 空间平面方程的一般表达式为&#xff1a;AxByCzD0; 则有&#xff1a;平面法向量为n&#xff08;A,B,C&#xff09;. 第一种方法&#xff1a;对于空间中n个点&#xff08;n3&#xff09; 空间中的离散…...

Eclipse IDE 集成 WebLogic Server 14

本文介绍了如何将在 Java SE 11 上运行的 WebLogic Server 14.1.1.0.0 与 Oracle Enterprise Pack for Eclipse (OEPE) 12.2.1.0 集成到最新支持的 Eclipse IDE for Java EE Developers 版本中。 您需要从获取所有部分开始 - Java SE Development Kit、WebLogic Server、Eclips…...

每日一题:LeetCode 146 LRU缓存

运用你所掌握的数据结构&#xff0c;设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类&#xff1a;LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0…...

链表 + 数组模拟链表

链表的指针实现 1.指针 #include<iostream> using namespace std; int main(){int a 5;int *p; // int 型的指针double *q; //double 型的指针p &a;// cout << p 指向 acout << *p << endl; //间接输出 areturn 0; }2.申请动态内存&#xff08…...

boost::geometry::detail::overlay::approximately_equals用法的测试程序)

boost::geometry::detail::overlay::approximately_equals用法的测试程序 实现功能C++实现代码实现功能 boost::geometry::detail::overlay::approximately_equals用法的测试程序) C++实现代码 #include <geometry_test_common.hpp> #include <boost/geometry/algo…...

OpenCV 求图形得质心

当窗口显示图像时&#xff0c;使用鼠标在图像上随意画出一个矩形&#xff0c;求出物体在矩形内部的质心坐标。 原始图如下&#xff1a; 期望的效果图像&#xff1a; #include "stdio.h" #include "cv.h" #include "cxcore.h" #include "h…...

寻找连通域的质心

MATLAB 1、灰度化 2、二值化 3、取反 4、连通域标记 连通域标记 5、对每个连通域&#xff0c;计算x坐标和&#xff0c;y坐标和&#xff0c;分别除以面积则为质心坐标 clear;clc;close all; Iimread(1.png);%读取原图像 figure(1);imshow(I);%显示原图像I_grayrgb2gray(I);%原图…...

信号频谱质心matlab,时频分析包tfrstft,然后求频谱质心

w10.23;w21;f03.4*10^11;fs100;c3*10^8;r0.00025;r10.005;r20.0008;t0:0.01:30;a0.25-r*w2;t3w2.*t;t4floor(t3);yabs(t3-0.5-t4);aaa1/(1-2*a).*(y-aabs(y-a));sr1.*sin(2.*pi.*w1.*t)r2.*aaa;srexp(1j*2*pi*f0.*(t-2*s/c));Llength(sr);%[tfr,t,f] tfrstft(sr.,1:L,L,hammi...

求质心

clear;clc;close all Iimread(img.jpg); I_grayrgb2gray(I); levelgraythresh(I_gray); [height,width]size(I_gray); I_bwim2bw(I_gray,level); for i1:height %%循环中进行反色 for j1:width if I_bw(i,j)1 I_bw(i,j)0; else …...

ITK 求质心

通过LabelGeometryImageFilter可以求Label Image各个区域的质心和BoundingBox。然而&#xff0c;如果图像的spacing不是1&#xff0c;它并不会考虑进去&#xff0c;因此得到的结果并未我们所愿的。针对这个问题&#xff0c;有人实现了相关的模块(itkOBBLabelMap)&#xff0c;可…...

淦ORB-SLAM2源码 01--IC_Angle函数(灰度质心求角度)

IC_Angle函数&#xff08;灰度质心求角度&#xff09;原理角度计算质心的计算方法umax的计算IC_Angle源码解析&#xff1a;具体实现原理 角度计算 灰度质心法&#xff1a;以几何中心和灰度质心的连线作为该特征点方向 1、为了保证旋转不变性&#xff0c;所以要在圆内计算&…...

求不规则多边形质心

最近做一个关于超像素的实验&#xff0c;实验过程中需要用到超像素的质心&#xff0c;所以在网上搜了一下资料&#xff0c;发现了一些不错的方法。 https://blog.csdn.net/tb3039450/article/details/24115303 这个我认为是挺不错的方法&#xff0c;但是程序的运行效率不高&…...

PCL质心求取算法

emmm第一天学习PCL 可能很多都是用自带的写的加油吧&#xff01; ---------------------------------------------------------------------------------------------------------------------------------#include <iostream>#include <pcl/point_cloud.h>#includ…...

空间曲线的质心、形心计算方法

1、质量中心简称质心&#xff0c;指物质系统上被认为质量集中于此的一个假想点&#xff1b;重心是在重力场中&#xff0c;物体处于任何方位时所有各组成支点的重力的合力都通过的那一点。规则而密度均匀物体的重心就是它的几何中心&#xff1b;面的形心就是截面图形的几何中心。…...

apk反编译教程+工具

apk反编译工具&#xff1a; apktool &#xff0c;dex2jar和jd-gui 。其中apktool主要是对apk里的资源文件进行解压。使用dex2jar反编译apk得到Java源代码。使用jd-gui工具将class文件反编译成java源代码。 用法&#xff1a; apktool:运行CMD&#xff0c;进入比如app-release…...

Android APK反编译教程(带工具)

工具介绍&#xff1a;工具下载 apktool 作用&#xff1a;资源文件获取&#xff0c;可以提取出图片文件和布局文件进行使用查看 dex2jar 作用&#xff1a;将apk反编译成java源码&#xff08;classes.dex转化成jar文件&#xff09; jd-gui 作用&#xff1a;查看APK中…...

mac android apk反编译

在mac os系统上反编译android apk&#xff0c;首先需要准备好以下3个文件&#xff1a;1、apktool&#xff1a;https://ibotpeaches.github.io/Apktool/install/ 2、dex2jar&#xff1a;https://github.com/pxb1988/dex2jar 3、jd-gui&#xff1a;http://jd.benow.ca下载好后&a…...

android 反编译去会员,反编译教程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼如何修改信息,联系人,通话记录的2级字体颜色教程(4.1.1和4.1.2)第一个修改信息的字体颜色2级1.反编辑SecMms.apk2.打开res\layout-sw359dp的conversation_list_item.xml3.找到4.把上面的颜色编码修改成android:textColor"#fff…...

android反编译apk命令,APK反编译关键命令及步骤

反编译对于开发来说属于基本功&#xff0c;会了反编译&#xff0c;既可以用来查看我们要发布的包配置是否正确&#xff0c;代码是否有什么问题&#xff0c;是否存在被他人注入修改的情况&#xff0c;还可以用来学习别人的代码&#xff0c;当然要是混淆加固的非常厉害那就另当别…...

【我的Android进阶之旅】APK反编译教程和工具下载

学习和开发Android应用有一段时间了&#xff0c;今天写一篇博客总结一下Android的apk文件反编译。我们知道&#xff0c;Android应用开发完成之后&#xff0c;我们最终都会将应用打包成一个apk文件&#xff0c;然后让用户通过手机或者平板电脑下载下来进行安装。正常情况下&…...

APK反编译教程新手第一课:安卓基础知识

APK反编译教程新手第一课:安卓基础知识 APK、Dalvik字节码和smali文件 学习路线 请点击查看博客文章 逆向常用工具 手机上有: mt管理器.开个vip更好使.支持bin大佬 电脑端上面有: AndroidKillernjadx-gui-1.0.0 APK文件基本结构 • assets\ <资…...

安卓 apk反编译教程

千里之行&#xff0c;始于足下。发扬 开源精神&#xff0c;废话不多说&#xff0c;下面为大家带来详细教程。 一&#xff0c;首先准备工具&#xff1a; 我已经为大家收集了工具&#xff0c;上传在我的github上 &#xff1a; 下载地址&#xff1a;https://github.com/module…...

APK反编译工具使用教程

apktool.bat&#xff1b;apktool.jar &#xff08;主要还原manifest文件和重新打包&#xff09; apktool.bat、apktool.jar 下载地址 我们直接解压apk&#xff0c;里面的manifest文件可能就是乱码的情况。 所以使用该工具可以最大程度的还原apk中的manifest文件和资源文件 。 …...

apk 反编译工具及使用

这里先来推荐一个 sourceforge 小玩意 &#xff0c;它号称是全球最大的开源软件平台和仓库&#xff0c;官网地址&#xff1a;SourceForge - Download, Develop and Publish Free Open Source Software里面 有很多值得研究的开源项目&#xff1b; 今天要说的是apk反编译工具&am…...

Android APK反编译教程

目录一、反编译工具二、注意事项三、apktool1.1 官方链接1.2 下载安装1.3 使用四、dex2jar1.1 官方链接1.2 下载安装1.3 使用五、jd-gui1.1 官方链接1.2 下载安装1.3 使用一、反编译工具 1、apktool&#xff1a;获取资源文件&#xff0c;提取图片文件&#xff0c;布局文件&…...