输入输出

文章目录

  • 输入输出
    • 一、输入输出的概念
      • (1)I/O (Input/Output)流
      • (2)I/O流分类
        • 1.面向字符的流
        • 2.面向字节的流
      • (3)标准输入输出流对象
      • (4)标准输入/输出重新定向
      • (5)键盘输入输出
    • 二、文件读写
      • (1)写文本文件
        • 1.写文本文件相关的类
        • 2.写文本文件
      • (2)读文本文件
        • 1.读文本文件相关的类
        • 2.读文本文件并显示在屏幕上
      • (3)写二进制文件
      • (4)读二进制文件
    • 附:输入输出的重要类
      • (1)Java Scanner 类
      • (2)Java File类
        • 1.创建对象
        • 2.其他操作
      • (3)FileInputStream
        • 1.创建对象
        • 2.其他的流操作
      • (4)FileOutputStream
        • 1.创建对象
        • 2.其他的流操作
      • (5)Java FileReader类
        • 1.创建对象
        • 2.其他操作
      • (6)Java FileWriter类
        • 1.创建对象
        • 2.其他操作

一、输入输出的概念

(1)I/O (Input/Output)流

  • Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。

  • Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。

  • 一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。

  • Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中

(2)I/O流分类

输入流和输出流的类层次图:

  • 从流的方向划分
    ▫ 输入流
    ▫ 输出流
  • 从流的分工划分
    ▫ 节点流
    ▫ 处理流
  • 从流的内容划分
    ▫ 面向字符的流
    ▫ 面向字节的流

1.面向字符的流

针对字符数据的特点进行过优化,提供一些面向字符的有用特性。
源或目标通常是文本文件;
实现内部格式和文本文件中的外部格式之间转换。

  • java.io包中所有字符流的抽象超类。

    • Reader提供了输入字符的API。
    • Writer提供了输出字符的API。
  • Reader、Writer的子类又可分为两大类
    • 节点流:从数据源读入数据或往目的地写出数据;
    • 处理流:对数据执行某种处理。
  • 多数程序使用这两个抽象类的一系列子类来读入/写出文本信息
    • 例如FileReader/FileWriter用来读/写文本文件。

2.面向字节的流

• 数据源或目标中含有非字符数据,必须用字节流来输入/输出
• 通常被用来读写诸如图片、声音之类的二进制数据
• 绝大多数数据是被存储为二进制文件的,通常二进制文件要比含有相同数据量的文本文件小得多

(3)标准输入输出流对象

System类的静态成员变量:

  • System.in: InputStream类型的,代表标准输入流,默认状态对应于键盘输入。
  • System.out:PrintStream类型的,代表标准输出流,默认状态对应于显示器输出。
  • System.err:PrintStream类型的,代表标准错误信息输出流,默认状态对应于显示器输出。

(4)标准输入/输出重新定向

  • setIn(InputStream): 设置标准输入流
  • setOut(PrintStream):设置标准输出流
  • setErr(PrintStream):设置标准错误输出流

例:标准输入/输出重定向(复制文件)

import java.io.*;
public class Redirecting {public static void main(String[] args) throws IOException {BufferedInputStream in = new BufferedInputStream(new FileInputStream( "Redirecting.java"));PrintStream out = new PrintStream( new BufferedOutputStream( new FileOutputStream("test.out")));System.setIn(in); System.setOut(out); System.setErr(out);BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String s;while((s = br.readLine()) != null) System.out.println(s);in.close();out.close();}
}

(5)键盘输入输出

  • System.in
    程序启动时由Java系统自动创建的流对象,它是原始的字节流,不能直接从中读取字符,需要对其进行进一步的处理

  • InputStreamReader(System.in)
    以System.in为参数创建一个InputStreamReader流对象,相当于字节流和字符流之间的一座桥梁,读取字节并将其转换为字符

  • BufferedReader in
    对InputStreamReader处理后的信息进行缓冲,以提高效率

  • printX

    System.out.printf()
    
    System.out.println()
    
  • Scanner:
    一个方便的扫描API: 把文本转化成基本类型或者String

    Scanner s = new Scanner(System.in);
    int n = s.nextInt();
    

    还有下列方法:nextByte(),nextDouble(),nextFloat(),nextInt(),nextLine(),nextLong(),nextShort().

从键盘读入信息并在显示器上显示

import java.io.*;
public class Echo {public static void main(String[] args)  throws IOException {BufferedReader in = new BufferedReader(new InputStreamReader(System.in));String s;while((s = in.readLine()).length() != 0)System.out.println(s);}}

二、文件读写

(1)写文本文件

1.写文本文件相关的类

  • FileWriter类

    (见附录)

  • BufferedWriter类

    • 如果需要写入的内容很多,就应该使用更为高效的缓冲器流类BufferedWriter

    • FileWriter和BufferedWriter类都用于输出字符流,包含的方法几乎完全一样,但BufferedWriter多提供了一个newLine()方法用于换行

    • 默认缓冲区大小构造字符缓冲输出流对象
      BufferedWriter(Writer out) :

    • 指定缓冲区大小

      BufferedWriter(Writer out,int size):
      

      out通常是类java.io.FileWriter的实例对象

      File file = new File("D:/Files/buffered.txt");
      Writer writer = new FileWriter(file);
      BufferedWriter bw = new BufferedWriter(writer);
      

2.写文本文件

import java.io.*;
class FileWriterTester {public static void main ( String[] args ) {String fileName = "c:\\Hello.txt" ;try {  //将所有IO操作放入try块中FileWriter writer = new FileWriter( fileName ,true );writer.write( "Hello!\n");  writer.write( "This is my first text file,\n"  );  writer.write( "You can see how this is done. \n" );writer.write("输入一行中文也可以\n");writer.close();}catch ( IOException iox) { System.out.println("Problem writing" + fileName ); }}
}
  • 运行此程序,会发现在原文件内容后面又追加了重复的内容,这就是将构造方法的第二个参数设为true的效果

  • 如果将文件属性改为只读属性,再运行本程序,就会出现IO错误,程序将转入catch块中,给出出错信息

  • 在给出文件名的情况下构造 FileWriter 对象,它具有指示是否追加写入数据的 boolean 值。

    FileWriter(String fileName, boolean append)
    

(2)读文本文件

1.读文本文件相关的类

  • FileReader类:

    • 从文本文件中读取字符。
    • 继承自Reader抽象类的子类InputStreamReader
  • BufferedReader
    • 读文本文件的缓冲器类。
    • 具有readLine()方法,可以对换行符进行鉴别,一行一行地读取输入流中的内容。
    • 继承自Reader。

2.读文本文件并显示在屏幕上

文件输入方法:

BufferedReader in = new BufferedReader(new FileReader( fileName) );

import java.io.*;
class BufferedReaderTester {public static void main ( String[] args ) {String fileName = "C:/Hello.txt" , line;try {BufferedReader in = new BufferedReader(new FileReader( fileName ) );line = in.readLine(); //读取一行内容while ( line != null ) { System.out.println( line ); line = in.readLine();}in.close(); }catch ( IOException iox ) { System.out.println("Problem reading " + fileName );}}
}
  • 运行该程序,屏幕上将逐行显示出Hello.txt文件中的内容。

  • FileReader对象:创建后将打开文件,如果文件不存在,会抛出一个IOException

  • BufferedReader类的readLine()方法:从一个面向字符的输入流中读取一行文本。如果其中不再有数据,返回null

  • Reader类的read()方法:也可用来判别文件结束。该方法返回的一个表示某个字符的int型整数,如果读到文件末尾,返回 -1。据此,可修改本例中的读文件部分:

    int c;
    while((c=in.read())!= -1) System.out.print((char)c);
    
  • close()方法:为了操作系统可以更为有效地利用有限的资源,应该在读取完毕后,调用该方法

(3)写二进制文件

将三个int型数字255/0/-1写入数据文件data1.dat

import java.io.*;
class FileOutputstreamTester {public static void main ( String[] args ) { String fileName = "c:/data1.dat" ;int value0  = 255, value1  = 0, value2 = -1;try {DataOutputStream out = new DataOutputStream(new FileOutputStream( fileName  ) );out.writeInt( value0 );out.writeInt( value1 );out.writeInt( value2 );out.close();}catch ( IOException iox ){System.out.println("Problem writing " + fileName );   }}}
  • 运行结果

    • 运行程序后,在C盘生成数据文件data1.dat
    • 用写字板打开没有任何显示
    • 用ultraEdit打开查看其二进制信息,内容为00 00 00 FF 00 00 00 00 FF FF FF FF,每个int数字都是32个bit的
  • 说明
    • FileOutputStream类的构造方法负责打开文件“data1.dat”用于写数据
    • FileOutputStream类的对象与DataOutputStream对象连接,写基本类型的数据

向文件中写入各种数据类型的数,并统计写入的字节数

import java.io.*;
class BufferedOutputStreamTester {public static void main ( String[] args ) throws IOException {String fileName = "mixedTypes.dat" ;DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream( fileName  ) ) );dataOut.writeInt( 0 );System.out.println( dataOut.size()  + " bytes have been written.");dataOut.writeDouble( 31.2 );System.out.println( dataOut.size()  + " bytes have been written.");dataOut.writeBytes("JAVA");System.out.println( dataOut.size()  + " bytes have been written.");dataOut.close();}
}
  • 运行结果

    4 bytes have been written
    12 bytes have been written
    16 bytes have been written

  • BufferedOutputStream

    • 写二进制文件的缓冲流类
    • 类似于文本文件中的BufferedWriter
    • 对于大量数据的写入,可提高效率
    • 用法示例:
      DataOutputStream out = new DataOutputStream( new BufferedOutputStream( new FileOutputStream( fileName ) ) );
      

(4)读二进制文件

读取例上一个创建的数据文件中的3个int型数字,显示相加结果

import java.io.*;
class DataInputStreamTester {public static void main ( String[] args ) {String fileName = "c:\\data1.dat";int sum = 0;try {DataInputStream instr = new DataInputStream(new BufferedInputStream(new FileInputStream( fileName )));sum += instr.readInt();sum += instr.readInt();  sum += instr.readInt();System.out.println( "The sum is: " + sum );instr.close();}catch ( IOException iox ) {System.out.println("Problem reading " + fileName ); }}}
}
  • 该程序显示结果是254
  • 分析:
    • readInt方法可以从输入流中读入4个字节并将其当作int型数据
    • 由于知道文件中存储的是3个int型数据,所以使用了3个读入语句
    • 如果不知道数据的个数该怎么办呢?因为DataInputStream的读入操作如遇到文件结尾就会抛出EOFException异常,所以我们可以将读操作放入try块中
  • 过滤流
    • 读或写的同时对数据进行处理
    • 通过另外一个流来构造一个过滤流
    • 大部分java.io 包所提供过滤流都是FilterInputStream和FilterOutputStream的子类
      • DataInputStream 和 DataOutputStream
      • BufferedInputStream 和 BufferedOutputStream
      • LineNumberInputStream
      • PushbackInputStream
      • PrintStream

附:输入输出的重要类

(1)Java Scanner 类

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。

Scanner s = new Scanner(System.in);
  • next 方法
    1、一定要读取到有效字符后才可以结束输入。
    2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
    3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
    next() 不能得到带有空格的字符串。

    import java.util.Scanner; public class ScannerDemo {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 从键盘接收数据// next方式接收字符串System.out.println("next方式接收:");// 判断是否还有输入if (scan.hasNext()) {String str1 = scan.next();System.out.println("输入的数据为:" + str1);}scan.close();}
    }
    

    next方式接收:
    runoob com
    输入的数据为:runoob

  • nextLine 方法
    1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
    2、可以获得空白。

    import java.util.Scanner;public class ScannerDemo {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 从键盘接收数据// nextLine方式接收字符串System.out.println("nextLine方式接收:");// 判断是否还有输入if (scan.hasNextLine()) {String str2 = scan.nextLine();System.out.println("输入的数据为:" + str2);}scan.close();}
    }
    

    nextLine方式接收:
    runoob com
    输入的数据为:runoob com

  • nextXxx()方法
    如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取:

import java.util.Scanner;public class ScannerDemo {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 从键盘接收数据int i = 0;float f = 0.0f;System.out.print("输入整数:");if (scan.hasNextInt()) {// 判断输入的是否是整数i = scan.nextInt();// 接收整数System.out.println("整数数据:" + i);} else {// 输入错误的信息System.out.println("输入的不是整数!");}System.out.print("输入小数:");if (scan.hasNextFloat()) {// 判断输入的是否是小数f = scan.nextFloat();// 接收小数System.out.println("小数数据:" + f);} else {// 输入错误的信息System.out.println("输入的不是小数!");}scan.close();}
}

运行样例:

输入整数:1.2
输入的不是整数!
输入小数:小数数据:1.2

输入整数:12
整数数据:12
输入小数:1.2
小数数据:1.2

(2)Java File类

Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。

1.创建对象

File对象代表磁盘中实际存在的文件和目录。通过以下构造方法创建一个File对象:

  • 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例

    File(File parent, String child);
    
  • 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例

    File(String pathname)
    
  • 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例

    File(String parent, String child)
    
  • 通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例

    File(URI uri)
    

2.其他操作

public String getName()

返回由此抽象路径名表示的文件或目录的名称。

public String getParent()

返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 null。

public File getParentFile()

返回此抽象路径名的父路径名的抽象路径名,如果此路径名没有指定父目录,则返回 null。

public String getPath()

将此抽象路径名转换为一个路径名字符串。

public boolean isAbsolute()

测试此抽象路径名是否为绝对路径名。

public String getAbsolutePath()

返回抽象路径名的绝对路径名字符串。

public boolean canRead()

测试应用程序是否可以读取此抽象路径名表示的文件。

public boolean canWrite()

测试应用程序是否可以修改此抽象路径名表示的文件。

public boolean exists()

测试此抽象路径名表示的文件或目录是否存在。

public boolean isDirectory()

测试此抽象路径名表示的文件是否是一个目录。

public boolean isFile()

测试此抽象路径名表示的文件是否是一个标准文件。

public long lastModified()

返回此抽象路径名表示的文件最后一次被修改的时间。

public long length()

返回由此抽象路径名表示的文件的长度。

public boolean createNewFile() throws IOException

当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。

public boolean delete()

删除此抽象路径名表示的文件或目录。

public void deleteOnExit()

在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。

public String[] list()

返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。

public String[] list(FilenameFilter filter)

返回由包含在目录中的文件和目录的名称所组成的字符串数组,这一目录是通过满足指定过滤器的抽象路径名来表示的。

public File[] listFiles()

返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。

public File[] listFiles(FileFilter filter)

返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。

public boolean mkdir()

创建此抽象路径名指定的目录。

public boolean mkdirs()

创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。

public boolean renameTo(File dest)

重新命名此抽象路径名表示的文件。

public boolean setLastModified(long time)

设置由此抽象路径名所指定的文件或目录的最后一次修改时间。

public boolean setReadOnly()

标记此抽象路径名指定的文件或目录,以便只可对其进行读操作。

public static File createTempFile(String prefix, String suffix, File directory) throws IOException

在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。

public static File createTempFile(String prefix, String suffix) throws IOException

在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。

public int compareTo(File pathname)

按字母顺序比较两个抽象路径名。

public int compareTo(Object o)

按字母顺序比较抽象路径名与给定对象。

public boolean equals(Object obj)

测试此抽象路径名与给定对象是否相等。

public String toString()

返回此抽象路径名的路径名字符串。

(3)FileInputStream

1.创建对象

可以使用字符串类型的文件名来创建一个输入流对象来读取文件:

InputStream f = new FileInputStream("C:/java/hello");

使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:

File f = new File("C:/java/hello");
InputStream in = new FileInputStream(f);

2.其他的流操作

public void close() throws IOException{}

关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。

protected void finalize()throws IOException {}

这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。

public int read(int r)throws IOException{}

这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。

public int read(byte[] r) throws IOException{}

这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。

public int available() throws IOException{}

返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。

(4)FileOutputStream

1.创建对象

使用字符串类型的文件名来创建一个输出流对象:

OutputStream f = new FileOutputStream("C:/java/hello")

使用一个文件对象来创建一个输出流来写文件

File f = new File("C:/java/hello");
OutputStream fOut = new FileOutputStream(f);

2.其他的流操作

public void close() throws IOException{}

关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。

protected void finalize()throws IOException {}

这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。

public void write(int w)throws IOException{}

这个方法把指定的字节写到输出流中。

public void write(byte[] w)

把指定数组中w.length长度的字节写到OutputStream中。

(5)Java FileReader类

1.创建对象

在给定从中读取数据的 File 的情况下创建一个新 FileReader。

FileReader(File file)

在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。

FileReader(FileDescriptor fd)

在给定从中读取数据的文件名的情况下创建一个新 FileReader。

FileReader(String fileName)

2.其他操作

public int read() throws IOException

读取单个字符,返回一个int型变量代表读取到的字符

public int read(char [] c, int offset, int len)

读取字符到c数组,返回读取到字符的个数

(6)Java FileWriter类

1.创建对象

在给出 File 对象的情况下构造一个 FileWriter 对象

FileWriter(File file)
 FileWriter(File file, boolean append)
  • file:要写入数据的 File 对象。
  • append:如果 append 参数为 true,则将字节写入文件末尾处,相当于追加信息。如果 append 参数为 false, 则写入文件开始处。

构造与某个文件描述符相关联的 FileWriter 对象

FileWriter(FileDescriptor fd)

在给出文件名的情况下构造 FileWriter 对象,它具有指示是否挂起写入数据的 boolean 值。

FileWriter(String fileName, boolean append)

2.其他操作

public void write(int c) throws IOException

写入单个字符c。

public void write(char [] c, int offset, int len)

写入字符数组中开始为offset长度为len的某一部分。

public void write(String s, int offset, int len)

写入字符串中开始为offset长度为len的某一部分。

【Java程序设计】输入输出相关推荐

  1. java程序设计输入输出实验_20145320《Java程序设计》第五次实验报告

    20145320<Java程序设计>第五次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18: ...

  2. 20175320 2018-2019-2 《Java程序设计》第2周学习总结

    20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...

  3. java程序设计pdf下载_Java程序设计(迟立颖) PDF扫描版[21MB]

    Java程序设计由浅入深地介绍了Java的基础知识,并结合具体的实例重点阐述了Java面向对象的概念及其程序设计方法,还介绍了图形用户界面(GUI)等知识.全书共分11章,内容包括Java概述.Jav ...

  4. Ways to 优化JAVA程序设计和编码,提高JAVA性能

    通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化.一般有两种方案:即优化代码或更改设计方法.我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能 ...

  5. java实验四云南大学_云南大学JAVA程序设计实验四

    云南大学JAVA程序设计实验 云南大学软件学院 实 验 报 告 序 号: 实验老师: 陆歌皓 课程名称: JAVA程序设计实验 实验名称: lab4 学 号: 20111120279 姓 名: 李张昱 ...

  6. java程序设计_80后程序员,带你深入理解Java基本的程序设计结构,不来你别后悔...

    前言 现在,假定已经成功地安装了JDK,并且能够运行第2章中给出的示例程序.从现在开始将介绍Java应用程序设计.本章主要讲述程序设计相关的基本概念(如数据类型.分支以及循环)在Java中的实现方式. ...

  7. 20145204 《Java程序设计》第6周学习总结

    20145204 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 数据流 I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据 ...

  8. 专科java程序设计试卷_java程序设计试卷(含答案)

    ----------------密----------------封----------------线----------------- 年级: 层次: 专业: 学号: 姓名: 2015年春季学期 & ...

  9. java程序设计实验报告册_20145215《Java程序设计》实验一实验报告

    实验一 Java开发环境的熟悉 实验内容及步骤 使用JDK编译.运行简单的Java程序 命令行下程序开发: 在命令行下建立实验目录,进入该目录后创建exp1目录 敲入以下代码: package exp ...

  10. java实验1机动车实验目的_《Java程序设计》实验指导书.doc

    <Java程序设计>实验指导书 实验一.熟悉JDK环境及主要命令 一.实验目的 1) 熟悉JDK的环境配置 2) 掌握JDK的命令 3) 掌握Java Application程序的开发过程 ...

最新文章

  1. java udp tcp协议_【java】TCP和UDP传输协议
  2. c与python的区别-Python与C语言有什么区别?
  3. C++基本语法( Visual Studio 2015 )【个人 见解】
  4. 编写你自己的单点登录(SSO)服务(转)
  5. html5 js选择器,使用HTML5的JS选择器操作页面中的元素
  6. ALSA声卡12_从零编写之添加音量控制_学习笔记
  7. jbb是什么梗_子水是什么意思,子水命理
  8. java 图像膨胀_OpenCV3 Java图形图像上的膨胀(Imgproc.dilate)
  9. 什么是IEC 61508?
  10. Hadoop hdfs编程案例和java交互
  11. 最新基于CentOS 5.5 ,集成lamp,lnmp终级安装版
  12. ABP vnext框架 返回JSON时间带T格式转换解决方案
  13. java嗅探网页视频_网页视频嗅探器( API钩子 )
  14. 计算机思维和数学的那些事
  15. 商用密码产品认证-电子签章系统
  16. 使用JavaScript实现一个俄罗斯方块
  17. RGB/YUV/YIQ 颜色空间
  18. 老九学堂 学习C++ 第九天
  19. 腾讯金融云mysql,腾讯云金融级云数据库优势与功能介绍
  20. 解决Android Studio无法下载

热门文章

  1. 设置php语言,PHP语言之php-fpm 基本设置与启动
  2. a算法和a*算法的区别_机器人路径规划算法,全局路径规划与局部路径规划究竟有哪些区别?...
  3. 如何选择云服务器与轻量应用服务器?谈谈自己的看法
  4. iphone开机白苹果_「手机维修自学教程」苹果6PLUS的DFU模式故障维修技巧思路决定速度...
  5. oracle+快速客户端安装方法,ORACLE简易客户端安装与使用方法
  6. vue3.0实现地图功能
  7. Python音乐播放器-美观-简约-本地
  8. Android 系统构架
  9. c语言file_C语言程序的编译和调试
  10. android中webview使用打开系统相机录像_有没有什么高效使用微信的经验?