尽管 Java 中字节流的功能十分强大,几乎可以直接或间接地处理任何类型的输入/输出操作,但利用它却不能直接操作 16 位的 Unicode 字符。这就要用到字符流。本节将重点介绍字符流的操作。

字符输入流

Reader 类是所有字符流输入类的父类,该类定义了许多方法,这些方法对所有子类都是有效的。

Reader 类的常用子类如下。

  • CharArrayReader 类:将字符数组转换为字符输入流,从中读取字符。
  • StringReader 类:将字符串转换为字符输入流,从中读取字符。
  • BufferedReader 类:为其他字符输入流提供读缓冲区。
  • PipedReader 类:连接到一个 PipedWriter。
  • InputStreamReader 类:将字节输入流转换为字符输入流,可以指定字符编码。

与 InputStream 类相同,在 Reader 类中也包含 close()、mark()、skip() 和 reset() 等方法,这些方法可以参考 InputStream 类的方法。下面主要介绍 Reader 类中的 read() 方法,如表 1 所示。

方法名及返回值类型 说明
int read() 从输入流中读取一个字符,并把它转换为 0~65535 的整数。如果返回 -1, 则表示已经到了输入流的末尾。为了提高 I/O 操作的效率,建议尽量使用下面两种 read()方法
int read(char[] cbuf) 从输入流中读取若干个字符,并把它们保存到参数 cbuf 指定的字符数组中。 该方法返回读取的字符数,如果返回 -1,则表示已经到了输入流的末尾
int read(char[] cbuf,int off,int len) 从输入流中读取若干个字符,并把它们保存到参数 cbuf 指定的字符数组中。其中,off 指定在字符数组中开始保存数据的起始下标,len 指定读取的字符数。该方法返回实际读取的字符数,如果返回 -1,则表示已经到了输入流的末尾

1. FileReader

FileReader的构造方法:

FileReader​(File file) 创建一个新的 FileReader ,给出 File读取。
FileReader​(FileDescriptor fd) 创建一个新的 FileReader ,给予 FileDescriptor从中读取。
FileReader​(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称。

例子:输入一个字符

import java.io.FileReader;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//创建一个文件读取流对象,和指定名称的文件相关联//文件必须已经存在,否则会报出异常FileNotFoundExceptionFileReader fr=new FileReader("E:\\test.txt");//调用读取流对象的read方法int ch=0;if((ch=fr.read())!=-1){System.out.println((char)ch);}//关闭流fr.close();}
}

例子:通过字符数组进行读取

import java.io.FileReader;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//创建一个文件读取流对象,和指定名称的文件相关联//文件必须已经存在,否则会报出异常FileNotFoundExceptionFileReader fr=new FileReader("E:\\test.txt");//定义一个字符数组,存储到字符//该read(char[])返回的是读到字符个数char str[]=new char[1024];int num=0;while((num=fr.read(str))!=-1){System.out.println(new String(str,0,num));}fr.close();}
}

2.BufferedReader

BufferedReader的构造方法

BufferedReader​(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader​(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。

BufferedReader的方法列表

1. void close​() 关闭流并释放与之相关联的任何系统资源。2. int read​() 读一个字符3. int read​(char[] cbuf, int off, int len) 将字符读入数组的一部分。4. String readLine​() 读一行文字。5. boolean ready​() 告诉这个流是否准备好被读取。6. void reset​() 将流重置为最近的标记。7. long skip​(long n) 跳过字符

例子:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;/*** 字符读取缓冲区* 该缓冲区提供了一个一次读一行的方法,readLine,方便于对文本数据的获取* 当返回null时,表示读到文件末尾* readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。* @author Administrator**/
public class Test {public static void main(String[] args) throws IOException {//创建一个读取流对象和文件相关联FileReader fr=new FileReader("E:\\test.txt");//为了提高效率,加入缓冲技术,将字符读取流对象作为参数传递给缓冲对象的构造函数BufferedReader str=new BufferedReader(fr);String line=null;while((line=str.readLine())!=null){System.out.println(line);}fr.close();}
}

例子:通过缓冲区复制文件:

/*
通过缓冲区复制一个.java文件。*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class  Test{public static void main(String[] args){BufferedReader bufr = null;BufferedWriter bufw = null;try{bufr = new BufferedReader(new FileReader("Hello.java"));bufw = new BufferedWriter(new FileWriter("Hello_Copy.txt"));String line = null;while((line=bufr.readLine())!=null){bufw.write(line);bufw.newLine();bufw.flush();}}catch (IOException e){throw new RuntimeException("读写失败");}finally{try{if(bufr!=null)bufr.close();}catch (IOException e){throw new RuntimeException("读取关闭失败");}try{if(bufw!=null)bufw.close();}catch (IOException e){throw new RuntimeException("写入关闭失败");}}}
}

3.CharArrayWrite
CharArrayReader 用于写入数据符,它继承于Writer。操作的数据是以字符为单位!

CharArrayReader构造函数

CharArrayWriter​() 创建一个新的CharArrayWriter。
CharArrayWriter​(int initialSize) 用指定的初始大小创建一个新的CharArrayWriter。

CharArrayReader方法列表

1. CharArrayWriter append​(char c) 将指定的字符附加到此作者。2. CharArrayWriter append​(CharSequence csq) 将指定的字符序列附加到此作者。3. CharArrayWriter append​(CharSequence csq, int start, int end)将指定字符序列的子序列附加到此作者。4. void close​() 关闭流。5. void flush​() 冲洗流。6. void reset​() 重置缓冲区,以便您可以再次使用它,而不会丢弃已经分配的缓冲区。7. int size​() 返回缓冲区的当前大小。8. String toString​() 将输入数据转换为字符串。9. void write​(char[] c, int off, int len) 将字符写入缓冲区。10. void write​(int c) 将一个字符写入缓冲区。11. void write​(String str, int off, int len) 将一部分字符串写入缓冲区。12. void writeTo​(Writer out) 将缓冲区的内容写入另一个字符流。

4.FilterWriter
FilterWriter是字符类型的过滤输出流。

FilterWriter的构造函数:

protected  FilterWriter​(Writer out) 创建一个新的过滤的作者。

FilterWriter的方法列表:

void close​() 关闭流,先刷新。
void flush​() 刷新流。
void write​(char[] cbuf, int off, int len) 写入字符数组的一部分。
void write​(int c) 写一个字符
void write​(String str, int off, int len) 写一个字符串的一部分。

字符输出流

与 Reader 类相反,Writer 类是所有字符输出流的父类,该类中有许多方法,这些方法对继承该类的所有子类都是有效的。

Writer 类的常用子类如下。

  • CharArrayWriter 类:向内存缓冲区的字符数组写数据。
  • StringWriter 类:向内存缓冲区的字符串(StringBuffer)写数据。
  • BufferedWriter 类:为其他字符输出流提供写缓冲区。
  • PipedWriter 类:连接到一个 PipedReader。
  • OutputStreamReader 类:将字节输出流转换为字符输出流,可以指定字符编码。

与 OutputStream 类相同,Writer 类也包含 close()、flush() 等方法,这些方法可以参考 OutputStream 类的方法。下面主要介绍 Writer 类中的 write() 方法和 append() 方法,如表 2 所示。

方法名及返回值类型 说明
void write(int c) 向输出流中写入一个字符
void write(char[] cbuf) 把参数 cbuf 指定的字符数组中的所有字符写到输出流中void write(char[] cbuf,int off,int len) 把参数 cbuf 指定的字符数组中的若干字符写到输出流中。其中,off 指定字符数组中的起始下标,len 表示元素个数
void write(String str) 向输出流中写入一个字符串
void write(String str, int off,int len) 向输出流中写入一个字符串中的部分字符。其中,off 指定字符串中的起始偏移量,len 表示字符个数
append(char c) 将参数 c 指定的字符添加到输出流中
append(charSequence esq) 将参数 esq 指定的字符序列添加到输出流中
append(charSequence esq,int start,int end) 将参数 esq 指定的字符序列的子序列添加到输出流中。其中,start 指定子序列的第一个字符的索引,end 指定子序列中最后一个字符后面的字符的索引,也就是说子序列的内容包含 start 索引处的字符,但不包括 end索引处的字符

注意:Writer 类所有的方法在出错的情况下都会引发 IOException 异常。关闭一个流后,再对其进行任何操作都会产生错误。

1.FileWrite

FileWrite的构造方法

OutputStreamWriter​(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter
OutputStreamWriter​(OutputStream out, String charsetName) 创建一个使用命名字符集的OutputStreamWriter
OutputStreamWriter​(OutputStream out, Charset cs) 创建一个使用给定字符集的OutputStreamWriter
OutputStreamWriter​(OutputStream out, CharsetEncoder enc) 创建一个使用给定字符集编码器的OutputStreamWriter

FileWrite方法列表

1. Writer append​(CharSequence csq) 将指定的字符序列附加到此作者。2. Writer append​(CharSequence csq, int start, int end)将指定字符序列的子序列附加到此作者。3. void close​() 关闭流,先刷新。4. void flush​() 刷新流。5. String getEncoding​() 返回此流使用的字符编码的名称。6. void write​(char[] cbuf, int off, int len) 写入字符数组的一部分。7. void write​(int c) 写一个字符8. void write​(String str, int off, int len) 写一个字符串的一部分。

例子:

import java.io.FileWriter;
import java.io.IOException;public class Test {public static void main(String[] args) {//创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。//而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。//其实该步就是在明确数据要存放的目的地。FileWriter fw=null;try {fw=new FileWriter("E:\\test.txt");//调用write方法,将字符串写入到流中。fw.write("kbkbkbkbkbkb");//覆盖test.txt的内容} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {//刷新流对象中的缓冲中的数据。//将数据刷到目的地中。//fw.flush();//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。//将数据刷到目的地中。//和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
}

上面的那种方式写入文件时,会将之前的文件覆盖了,之前文件中写的内容不存在了,那么如何在已有的文件后面添加内容

public static void main(String[] args) {FileWriter fw=null;try {fw=new FileWriter("E:\\test.txt",true);fw.write("kbkbkbkbkbkb");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

2.BufferedWrite
BufferedWriter 是缓冲字符输出流。它继承于Writer。
BufferedWriter 的作用是为其他字符输出流添加一些缓冲功能,使用BufferedWriter可以提高我们写入文件的效率。

BufferedWrite构造方法

BufferedWriter​(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter​(Writer out, int sz) 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。

BufferedWrite方法列表

1. void close​() 关闭流,先刷新。2. void flush​() 刷新流。3. void newLine​() 写一行行分隔符。4. void write​(char[] cbuf, int off, int len) 写入字符数组的一部分。5. void write​(int c) 写一个字符6. void write​(String s, int off, int len) 写一个字符串的一部分。

例子:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class  Test{public static void main(String[] args) throws IOException{//创建一个字符写入流对象FileWriter fw=new FileWriter("E:\\Hello.txt");//为了提高字符写入效率,加入缓冲技术//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。BufferedWriter bw=new BufferedWriter(fw);char[] c={'a','b','c','d','e','f','g',};bw.write(c,0,4);//换行bw.newLine();//再次写入bw.write(c,2,2);//刷新流bw.flush();//其实关闭缓冲区,就是在关闭缓冲区中的流对象。bw.close();}
}

字符文件输入流

为了读取方便,Java 提供了用来读取字符文件的便捷类——FileReader。该类的构造方法有如下两种重载形式。

  • FileReader(File file):在给定要读取数据的文件的情况下创建一个新的 FileReader 对象。其中,file表示要从中读取数据的文件。
  • FileReader(String fileName):在给定从中读取数据的文件名的情况下创建一个新 FileReader对象。其中,fileName 表示要从中读取数据的文件的名称,表示的是一个文件的完整路径。

在用该类的构造方法创建 FileReader 读取对象时,默认的字符编码及字节缓冲区大小都是由系统设定的。要自己指定这些值,可以在 FilelnputStream 上构造一个 InputStreamReader。

注意:在创建 FileReader 对象时可能会引发一个 FileNotFoundException 异常,因此需要使用 try catch 语句捕获该异常。

字符流和字节流的操作步骤相同,都是首先创建输入流或输出流对象,即建立连接管道,建立完成后进行读或写操作,最后关闭输入/输出流通道。

例 1
要将 D:\myJava\HelloJava.java 文件中的内容读取并输出到控制台,使用 FileReader 类的实现代码如下:

public class Test {public static void main(String[] args) {FileReader fr = null;try {fr = new FileReader("D:/myJava/HelloJava.java"); // 创建FileReader对象int i = 0;System.out.println("D:\\myJava\\HelloJava.java文件内容如下:");while ((i = fr.read()) != -1) { // 循环读取System.out.print((char) i); // 将读取的内容强制转换为char类型}} catch (Exception e) {System.out.print(e);} finally {try {fr.close(); // 关闭对象} catch (IOException e) {e.printStackTrace();}}}
}

如上述代码,首先创建了 FileReader 字符输入流对象 fr,该对象指向 D:\myJava\HelloJava.java 文件,然后定义变量 i 来接收调用 read() 方法的返回值,即读取的字符。在 while 循环中,每次读取一个字符赋给整型变量 i,直到读取到文件末尾时退出循环(当输入流读取到文件末尾时,会返回值 -1)。

字符文件输出流

Java 提供了写入字符文件的便捷类——FileWriter,该类的构造方法有如下 4 种重载形式。

  • FileWriter(File file):在指定 File 对象的情况下构造一个 FileWriter 对象。其中,file表示要写入数据的 File 对象。
  • FileWriter(File file,boolean append):在指定 File 对象的情况下构造一个 FileWriter对象,如果 append 的值为 true,则将字节写入文件末尾,而不是写入文件开始处。
  • FileWriter(String fileName):在指定文件名的情况下构造一个FileWriter 对象。其中,fileName表示要写入字符的文件名,表示的是完整路径。
  • FileWriter(String fileName,boolean append):在指定文件名以及要写入文件的位置的情况下构造FileWriter 对象。其中,append 是一个boolean 值,如果为 true,则将数据写入文件末尾,而不是文件开始处。

在创建 FileWriter 对象时,默认字符编码和默认字节缓冲区大小都是由系统设定的。要自己指定这些值,可以在 FileOutputStream 上构造一个 OutputStreamWriter 对象。

FileWriter 类的创建不依赖于文件存在与否,如果关联文件不存在,则会自动生成一个新的文件。在创建文件之前,FileWriter 将在创建对象时打开它作为输出。如果试图打开一个只读文件,将引发一个 IOException 异常。

注意:在创建 FileWriter 对象时可能会引发 IOException 或 SecurityException 异常,因此需要使用 try catch 语句捕获该异常。

例 2
编写一个程序,将用户输入的 4 个字符串保存到 D:\myJava\book.txt 文件中。在这里使用 FileWriter 类中的 write() 方法循环向指定文件中写入数据,实现代码如

import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner input=new Scanner(System.in);FileWriter fw=null;try {fw=new FileWriter("I:/work.txt");//创建FileWriter对象for(int i=0;i<4;i++){System.out.println("请输入第"+(i+1)+"个字符");String name=input.next();//读取输入的名称fw.write(name+"\r\n");//循环写入文件}System.out.println("录入成功");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {fw.close();//关闭对象} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

如上述代码,首先创建了一个指向 D:\myJava\book.txt 文件的字符文件输出流对象 fw,然后使用 for 循环录入 4 个字符串,并调用 write() 方法将字符串写入到指定的文件中。最后在 finally 语句中关闭字符文件输出流。

运行该程序,根据提示输入 4 个字符串,如下所示。接着打开 D:\myJava\book.txt 文件,将看到写入的内容,如图 所示。

请输入第1个字符
金箍棒棒
请输入第2个字符
三叉戟戟
请输入第3个字符
九齿耙耙
请输入第4个字符
双节棍棍
录入成功

字符缓冲区输入流

BufferedReader 类主要用于辅助其他字符输入流,它带有缓冲区,可以先将一批数据读到内存缓冲区。接下来的读操作就可以直接从缓冲区中获取数据,而不需要每次都从数据源读取数据并进行字符编码转换,这样就可以提高数据的读取效率。

BufferedReader 类的构造方法有如下两种重载形式。

  • BufferedReader(Reader in):创建一个 BufferedReader 来修饰参数 in 指定的字符输入流。
  • BufferedReader(Reader in,int size):创建一个 BufferedReader 来修饰参数 in指定的字符输入流,参数 size 则用于指定缓冲区的大小,单位为字符。

除了可以为字符输入流提供缓冲区以外,BufferedReader 还提供了 readLine() 方法,该方法返回包含该行内容的字符串,但该字符串中不包含任何终止符,如果已到达流末尾,则返回 null。readLine() 方法表示每次读取一行文本内容,当遇到换行(\n)、回车(\r)或回车后直接跟着换行标记符即可认为某行已终止。

例 3
使用 BufferedReader 类中的 readLine() 方法逐行读取 D:\myJava\Book.txt 文件中的内容,并将读取的内容在控制台中打印输出,代码如下:

public class Test {public static void main(String[] args) {FileReader fr = null;BufferedReader br = null;try {fr = new FileReader("D:\\myJava\\book.txt"); // 创建 FileReader 对象br = new BufferedReader(fr); // 创建 BufferedReader 对象System.out.println("D:\\myJava\\book.txt 文件中的内容如下:");String strLine = "";while ((strLine = br.readLine()) != null) { // 循环读取每行数据System.out.println(strLine);}} catch (FileNotFoundException e1) {e1.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {fr.close(); // 关闭 FileReader 对象br.close();} catch (IOException e) {e.printStackTrace();}}}
}

如上述代码,首先分别创建了名称为 fr 的 FileReader 对象和名称为 br 的 BufferedReader 对象,然后调用 BufferedReader 对象的 readLine() 方法逐行读取文件中的内容。如果读取的文件内容为 Null,即表明已经读取到文件尾部,此时退出循环不再进行读取操作。最后将字符文件输入流和带缓冲的字符输入流关闭。

运行该程序,输出结果如下所示:

文件内容:
金箍棒棒
三叉戟戟
九齿耙耙
双节棍棍

字符缓冲区输出流

BufferedWriter 类主要用于辅助其他字符输出流,它同样带有缓冲区,可以先将一批数据写入缓冲区,当缓冲区满了以后,再将缓冲区的数据一次性写到字符输出流,其目的是为了提高数据的写效率。

BufferedWriter 类的构造方法有如下两种重载形式。

  • BufferedWriter(Writer out):创建一个 BufferedWriter 来修饰参数 out 指定的字符输出流。
  • BufferedWriter(Writer out,int size):创建一个 BufferedWriter 来修饰参数 out指定的字符输出流,参数 size 则用于指定缓冲区的大小,单位为字符。

该类除了可以给字符输出流提供缓冲区之外,还提供了一个新的方法 newLine(),该方法用于写入一个行分隔符。行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行(\n)符。

提示:BufferedWriter 类的使用与 FileWriter 类相同,这里不再重述。

1.7 Java字符流的使用:字符输入/输出流、字符文件和字符缓冲区的输入/输出流相关推荐

  1. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

  2. 系统学习JAVA第十七天(字节流、字符流、缓冲的字节流、缓冲的字符流、将字节流转换为缓冲的字符流、面向对象——>字节流转成对象)

    系统学习JAVA第十七天 第一阶段在2021.2.1结束了! 一.数据传输 IO输入和输出,硬盘之间的数据交换 1.文件读写流程 ①创建文件的容器 ②判断方向 合适的类 创建和文件之间的通道 ③ 调用 ...

  3. java 字符流read函数,JAVA中文件的读写 I/O 输入输出流

    主要内容 1.编码问题 2.File类的使用 3.RandomAccessFile的使用 4.I/O 输入输出流 编码问题: 1 importjava.io.UnsupportedEncodingEx ...

  4. java写入dat文件_dat格式用什么播放器 如何在JAVA中进行文件的读写 I/O 输入输出流...

    3.RandomAccessFile的使用 4.I/O 输入输出流 1.创建File对象:File file=new File(String path);注意:File.seperater();获取系 ...

  5. java字符流解析_Java IO(四):字符流详解

    一.字符流 字节流提供了处理任何类型输入/输出操作的功能(因为对于计算机而言,一切都是0和1,只需把数据以字节形式表示就够了),但它们不可以直接操作Unicode字符,因为一个Unicode字符占用2 ...

  6. Java io字符流读入英文_Java IO 系列教程(四)-字符输入流(2)

    本文介绍字符输入流 在前面一节中,我们向一个文件中写入了一些字符,通过图片可以看出总共是6个中文字符和一个换行,总共是20个字节,可以推算出字符编码是utf-8,每个汉子占3三个字节.本文就用字符输入 ...

  7. java字符流的父类_Java基于代码实战的字符流父类、字符转换流、缓冲字符流、过滤流...

    1. Java输入输出(I/O)流的知识回顾: 补充:因为这篇文章是基于上一篇的延续,因此将上一篇进行简单的回顾,以便理解本节内容. 1)输入输出(I/O)流分类:共分为字节型输入输出流和字符型输入输 ...

  8. Java字节流和字符流的优缺点_字节流与字符流的区别用字节流好还是用字符流好?...

    字节流: (A)FileOutputStream(File name) 创建一个文件输出流,向指定的 File 对象输出数据. (B)FileOutputStream(FileDescriptor) ...

  9. java字符流写入式乱码_字节流乱码与字符流乱码

    本文总结自:https://blog.csdn.net/mingliangniwo/article/details/44178491 前提:数据展示过程:数据写入response容器,浏览器解析res ...

最新文章

  1. 在C#中应用哈希表(Hashtable)
  2. 【图像】jpg与jpeg的区别
  3. Web API--自定义异常结果的处理
  4. python为什么是动态语言_python为什么是动态语言
  5. maven 整体打包_Spirng boot maven多模块打包不踩坑(示例代码)
  6. php 判断页面加载完,所有ajax执行完且页面加载完判断
  7. 【实践驱动开发3-005】TI WL1835MODCOM8 在android的移植 - SDIO and wifi 基础
  8. [14-01] 闭包
  9. 让计算机教育因云而变,阿里云正式发布云原生人才培养合作计划
  10. 一个对oi选手的感想
  11. Linux通过UUID挂载和卸载硬盘
  12. python+seleniun+pyqt5 易班经验刷取开发记录
  13. Pidgin 插件法解决Ubuntu11.10 QQ
  14. Oracle 11g 通过透明网关访问瀚高数据库
  15. 223_动态设置页面指示器indicators
  16. PostgreSQL 别名
  17. 计算机系一班班会,计算机学院计算机类20级1班举行“爱在身边,温馨家园”主题班会...
  18. 字符串拼接:语言C#(CSharp)
  19. 使用SwiftyJSON解析JSON
  20. LightRoom预xmp文件如何导入设置?

热门文章

  1. Algorithm之RS:RS常用的一些库
  2. 方差过滤: Removing features with low variance
  3. js Array.prototype.slice.call(arguments,0) 理解
  4. 奇妙的棋盘(建图+搜索)
  5. 探秘JVM(二)——编译进行时
  6. 关于用飞信框架运行net程序-用批处理运行
  7. 软件安装被分成了两个iso文件怎么安装
  8. 解压与压缩ramdisk.img文件
  9. ST17H26读ID卡调试过程
  10. C++ Primer 5th笔记(chap 13 拷贝控制)合成的移动操作