I/O流·其他流

序列流

* A:什么是序列流
  * 序列流可以把多个字节输入流整合成一个,从序列流中读取数据时,将从被整合的第一个流开始,读完后再读下一个

* B:使用方式
  * 整合两个:SequenceInputStream(InputStream, InputStream)
  * 整合多个:SequenceInputStream(Enumeration)

  1. package com.heima.otherio;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.SequenceInputStream;
  8. import java.util.Enumeration;
  9. import java.util.Vector;
  10.  
  11. public class Demo1_SequenceInputStream {
  12.  
  13. public static void main(String[] args) throws IOException {
  14. // demo1(); // 不用序列流的方法
  15. // demo2(); // 整合两个输入流
  16. // demo3(); // 整合多个输入流
  17. }
  18.  
  19. public static void demo3() throws FileNotFoundException, IOException {
  20. FileInputStream fis1 = new FileInputStream("a.txt"); // 创建字节输入流
  21. FileInputStream fis2 = new FileInputStream("b.txt");
  22. FileInputStream fis3 = new FileInputStream("c.txt");
  23.  
  24. Vector<FileInputStream> v = new Vector<FileInputStream>(); // 创建泛型为字节输入流的集合对象
  25. v.add(fis1); // 将流对象添加到集合内
  26. v.add(fis2);
  27. v.add(fis3);
  28.  
  29. Enumeration<FileInputStream> e = v.elements(); // 根据Vector集合,创建泛型为字节输入流的枚举对象
  30. SequenceInputStream sis = new SequenceInputStream(e); // 将枚举中的输入流整合成一个
  31. FileOutputStream fos = new FileOutputStream("d.txt"); // 创建字节输出流
  32.  
  33. int c;
  34. while ((c = sis.read()) != -1) { // 从序列流中读取数据
  35. fos.write(c);
  36. }
  37. sis.close(); // 关闭序列流
  38. fos.close();
  39. }
  40.  
  41. public static void demo2() throws FileNotFoundException, IOException {
  42. FileInputStream fis1 = new FileInputStream("a.txt"); // 创建字节输入流1
  43. FileInputStream fis2 = new FileInputStream("b.txt"); // 创建字节输入流2
  44. SequenceInputStream sis = new SequenceInputStream(fis1, fis2); // 基于两个字节输入流,创建序列流
  45. FileOutputStream fos = new FileOutputStream("c.txt"); // 创建字节输出流
  46.  
  47. int b;
  48. while ((b = sis.read()) != -1) { // 从序列流读取数据
  49. fos.write(b);
  50. }
  51. sis.close(); // sis在关闭的时候会将构造方法中的流对象也都关闭
  52. fos.close();
  53. }
  54.  
  55. public static void demo1() throws FileNotFoundException, IOException {
  56. FileInputStream fis1 = new FileInputStream("a.txt"); // 创建字节输入流,关联a.txt
  57. FileOutputStream fos = new FileOutputStream("c.txt"); // 创建字节输出流,关联b.txt
  58.  
  59. int c;
  60. while ((c = fis1.read()) != -1) { // 不断地在a.txt上读取字节
  61. fos.write(c); // 将读到的字节写到c.txt上
  62. }
  63. fis1.close(); // 关闭字节输入流1
  64.  
  65. FileInputStream fis2 = new FileInputStream("b.txt"); // 创建字节输入流,关联c.txt
  66. while ((c = fis2.read()) != -1) { // 不断地在b.txt上读取字节
  67. fos.write(c); // 将读到的字节写到c.txt上
  68. }
  69.  
  70. fis2.close(); // 关闭字节输入流2
  71. fos.close(); // 关闭字节输出流
  72. }
  73. }

SequenceInputStream

内存输出流

* A:什么是内存输出流
  * 该输出流可以向内存中写数据,把内存当作一个缓冲区,写出之后可以一次性获取所有数据

* B:使用方法
  * 创建对象:new ByteArrayOutputStream()
  * 写出数据:write(int), write(byte[ ] )
  * 获取数据:toByteArray()

  1. package com.heima.otherio;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7.  
  8. public class Demo2_ByteArrayOutputStream {
  9.  
  10. public static void main(String[] args) throws IOException {
  11. // demo1();
  12. // demo2();
  13. }
  14.  
  15. public static void demo2() throws FileNotFoundException, IOException {
  16. FileInputStream fis = new FileInputStream("e.txt");
  17. ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 在内存中创建了可以增长的内存数组
  18.  
  19. int b;
  20. while ((b = fis.read()) != -1) {
  21. baos.write(b); // 将读取到的数据逐个写到内存中
  22. }
  23.  
  24. byte[] arr = baos.toByteArray(); // 将缓冲区的数据全部或取出来,并赋值给arr数组
  25. System.out.println(new String(arr));
  26.  
  27. System.out.println(baos.toString()); // 将缓冲区中的内容转换为字符串,使用平台默认的码表转换
  28. fis.close();
  29. // baos.close(); // 内存流不需要关,没有关的意义
  30. }
  31.  
  32. public static void demo1() throws FileNotFoundException, IOException {
  33. FileInputStream fis = new FileInputStream("e.txt");
  34. byte[] arr = new byte[4];
  35.  
  36. int len;
  37. while ((len = fis.read(arr)) != -1) {
  38. System.out.println(new String(arr, 0, len));
  39. }
  40. fis.close();
  41. }
  42. }

ByteArrayOutputStream

面试题

* 定义一个文件输入流,调用read(byte[ ] b)方法,将 a.txt文件中的内容打印出来(byte数组大小限制为5)

  1. package com.heima.test;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6.  
  7. public class Test1 {
  8. /*
  9. * 分析:
  10. * 1、read(byte[] b)是字节输入流的方法,因此需要创建FileInputStream,关联a.txt
  11. * 2、创建字节数组,长度为5
  12. * 3、创建内存输出流,将读到的数组写到内存输出流中
  13. * 4、将内存输出流的数据全部转换为字符串打印
  14. * 5、关闭输入流
  15. */
  16. public static void main(String[] args) throws IOException {
  17. FileInputStream fis = new FileInputStream("a.txt"); // 创建字节输入流,关联a.txt
  18. ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 创建内存流
  19.  
  20. byte[] arr = new byte[5];
  21. int len;
  22. while ((len = fis.read(arr)) != -1) { // 通过长度为5的数组读取数据
  23. baos.write(arr, 0, len); // 将数据写入内存中
  24. }
  25.  
  26. System.out.println(baos); // 将内存中的内容以字符串的形式打印
  27. fis.close(); // 关闭字节流
  28. }
  29. }

Test1

对象操作流ObjectOutputStream

* A:什么是对象操作流
  * 该流可以将一个对象写出,或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作
  * 对象需要实现序列化接口,可以可选择的重写ID号,类似于软件的版本号

* B:使用方法
  * 写出:new ObjectOutputStream(OutputStream), writeObject()

  1. package com.heima.bean;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class Person implements Serializable{
  6.  
  7. /**
  8. * 对象必须实现 可序列化接口
  9. */
  10. private static final long serialVersionUID = 2L;
  11. private String name;
  12. private int age;
  13. private String gender;
  14. public Person() {
  15. super();
  16.  
  17. }
  18. public Person(String name, int age) {
  19. super();
  20. this.name = name;
  21. this.age = age;
  22. }
  23. public String getName() {
  24. return name;
  25. }
  26. public void setName(String name) {
  27. this.name = name;
  28. }
  29. public int getAge() {
  30. return age;
  31. }
  32. public void setAge(int age) {
  33. this.age = age;
  34. }
  35. @Override
  36. public String toString() {
  37. return "Person [name=" + name + ", age=" + age + "]";
  38. }
  39.  
  40. }

Person类

  1. package com.heima.otherio;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.ObjectOutputStream;
  7. import java.util.ArrayList;
  8.  
  9. import com.heima.bean.Person;
  10.  
  11. public class Demo3_ObjectOutputStream {
  12.  
  13. public static void main(String[] args) throws IOException, IOException {
  14. // demo1();
  15. // demo2();
  16. }
  17.  
  18. public static void demo2() throws IOException, FileNotFoundException {
  19. Person p1 = new Person("张三", 23);
  20. Person p2 = new Person("李四", 24);
  21. Person p3 = new Person("王五", 25);
  22. Person p4 = new Person("赵六", 26);
  23.  
  24. ArrayList<Person> list = new ArrayList<Person>();
  25. list.add(p1);
  26. list.add(p2);
  27. list.add(p3);
  28. list.add(p4);
  29.  
  30. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e.txt"));
  31. oos.writeObject(list); // 把整个集合对象一次写出
  32. oos.close();
  33. }
  34.  
  35. public static void demo1() throws IOException, FileNotFoundException {
  36. Person p1 = new Person("张三",23); // 对象必须可序列化
  37. Person p2 = new Person("李四",24);
  38.  
  39. // FileOutputStream fos = new FileOutputStream("f.txt");
  40. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("f.txt")); // 创建对象输出流
  41. oos.writeObject(p1);
  42. oos.writeObject(p2);
  43.  
  44. oos.close();
  45. }
  46. }

ObjectOutputStream

对象操作流ObjectInputStream

* 读取:new ObjectInputStream(InputStream), readObject()

  1. package com.heima.otherio;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.ObjectInputStream;
  8. import java.io.ObjectOutputStream;
  9. import java.util.ArrayList;
  10.  
  11. import com.heima.bean.Person;
  12.  
  13. public class Demo4_ObjectInputStream {
  14.  
  15. public static void main(String[] args) throws IOException, ClassNotFoundException {
  16. // demo1();
  17. // demo2();
  18. }
  19.  
  20. public static void demo2() throws IOException, FileNotFoundException, ClassNotFoundException {
  21. ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt"));
  22. ArrayList<Person> list = (ArrayList<Person>) ois.readObject(); // 将集合对象一次读取
  23. for (Person person : list) {
  24. System.out.println(person);
  25. }
  26. }
  27.  
  28. public static void demo1() throws IOException, FileNotFoundException, ClassNotFoundException {
  29. // 对象输入流是反序列化
  30. ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e.txt")); // 创建对象输入流
  31.  
  32. Person p1 = (Person) ois.readObject(); // 从文件中读取对象,需要强转,因为读取时自动类型提升为Object
  33. Person p2 = (Person) ois.readObject();
  34.  
  35. System.out.println(p1);
  36. System.out.println(p2);
  37.  
  38. ois.close();
  39. }
  40. }

ObjectInputStream

打印流的概述和特点

* A:什么时打印流
  * 该流可以很方便的将对象的 toString()结果输出,并自动加上换行,而且可以使用自动刷出的模式
  * System.out就是一个PrintStream,其默认向控制台输出信息

* B:使用方式
  * 打印:print(), println()
  * 自动刷出:PrintWriter(OutputStream out, boolean autoFlush, String encoding)
  * 打印流以只操作数据为目的

  1. package com.heima.otherio;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.PrintStream;
  8. import java.io.PrintWriter;
  9.  
  10. import com.heima.bean.Person;
  11.  
  12. public class Demo5_PrintStream {
  13. /*
  14. * PritnStream和 PrintWriter 分别是打印的字节流和字符流
  15. * 二者是以只操作数据为目的的
  16. */
  17. public static void main(String[] args) throws IOException {
  18. // demo1();
  19. // demo2();
  20. }
  21.  
  22. public static void demo2() throws FileNotFoundException {
  23. PrintWriter pw = new PrintWriter(new FileOutputStream("f.txt"), true); // true表示打开了AutoFlush功能
  24. pw.println(97); // 自动刷出功能只针对println方法
  25. pw.write(97);
  26. pw.print(97);
  27. pw.close();
  28. }
  29.  
  30. public static void demo1() {
  31. System.out.println("aaa");
  32. PrintStream ps = System.out; // 获取标准输出流
  33. ps.println(97); // 打印97,底层通过 Integer.toString()将97 转换成字符串打印
  34. ps.write(97); // 打印a,查找码表,找到对应的值进行打印
  35.  
  36. Person p1 = new Person("张三", 23);
  37. ps.println(p1); // 默认调用对象的 toString()方法
  38.  
  39. Person p2 = null; // 打印引用数据类型,如果是null就打印null
  40. ps.println(p2);
  41. ps.close(); // 关闭打印流
  42. }
  43. }

PrintStream

标准输入流输出流概述和输出语句

* A:什么是标准输入输出流
  * System.in 是InputStream,标准输入流,默认可以从键盘输入读取字节数据
  * System.out 是PrintStream,标准输出流,默认可以向Console中输出字符和字节数据

* B:修改标准输入输出流
  * 修改输入流:System.setIn(InputStream)
  * 修改输出流:System.setOut(PrintStream)

  1. package com.heima.otherio;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.PrintStream;
  8.  
  9. public class Demo6_SystermInOut {
  10.  
  11. public static void main(String[] args) throws IOException{
  12. // demo1();
  13. // demo2();
  14. }
  15.  
  16. public static void demo2() throws FileNotFoundException, IOException {
  17. System.setIn(new FileInputStream("a.txt")); // 改变标准输入流
  18. System.setOut(new PrintStream("b.txt")); // 改变标准输出流
  19.  
  20. InputStream is = System.in; // 获取标准的键盘输入流,默认指向键盘,改变后指向a.txt
  21. PrintStream ps = System.out; // 获取标准输出流,默认指向控制台,改变后指向b.txt
  22.  
  23. int b;
  24. while ((b = is.read())!=-1) {
  25. ps.write(b);
  26. }
  27. is.close();
  28. ps.close();
  29. }
  30.  
  31. public static void demo1() throws IOException {
  32. InputStream is = System.in;
  33. int x = is.read(); // 读取一个字节
  34. System.out.println(x);
  35.  
  36. // is.close(); // 标准输入流只有一个,即使创建多个InputStream也都指向同一个
  37. }
  38. }

System.in

两种方式实现键盘录入

* A:BufferedReader的ReadLine()方法
  * BufferedReqader br = new BufferedReqader(new InputStreamReader(System.in));

* B:Scanner

  1. package com.heima.otherio;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.Scanner;
  7.  
  8. public class Demo7_SystemIn {
  9.  
  10. public static void main(String[] args) throws IOException {
  11. // demo1();
  12. // demo2();
  13. }
  14.  
  15. public static void demo2() {
  16. Scanner sc = new Scanner(System.in); // 也可以读取文件
  17. String line = sc.nextLine();
  18. System.out.println(line);
  19. sc.close();
  20. }
  21.  
  22. public static void demo1() throws IOException {
  23. BufferedReader br =
  24. new BufferedReader(new InputStreamReader(System.in)); // 通过转换流将字节流转换为字符流,因为标准输入流是字节流
  25. String line = br.readLine(); // 整行读取
  26. System.out.println(line);
  27. br.close(); // 关流
  28. }
  29. }

Scanner

修改标准输入输出流进行文件拷贝

  1. package com.heima.test;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.PrintStream;
  7.  
  8. public class Test2 {
  9.  
  10. public static void main(String[] args) throws IOException {
  11. System.setIn(new FileInputStream("psb.jpg")); // 改变标准输入流,绑定图片
  12. System.setOut(new PrintStream("copy.jpg")); // 改变标准输出流
  13.  
  14. InputStream is = System.in;
  15. PrintStream ps = System.out;
  16.  
  17. byte[] arr = new byte[1024]; // 创建字节数组
  18. int len;
  19.  
  20. while ((len = is.read(arr)) != -1) { // 读取数据
  21. ps.write(arr, 0, len); // 写入数据
  22. }
  23.  
  24. is.close(); // 关流
  25. ps.close();
  26. }
  27. }

Test2

随机访问流概述和读写数据

* A:随机访问流概述
  * RandomAccessFile概述
  * RandomAccessFile类不属于流,是Object类的子类,但是却融合了InputStream和OutputStream的功能
  * 支持对随机访问文件的读取和写入

* B:read(), write(), seek()

  1. package com.heima.otherio;
  2.  
  3. import java.io.IOException;
  4. import java.io.RandomAccessFile;
  5.  
  6. public class Demo8_RandomAccessFile {
  7.  
  8. public static void main(String[] args) throws IOException {
  9. RandomAccessFile raf = new RandomAccessFile("g.txt", "rw"); // 创建随机访问流,指定读写模式
  10. raf.write(97);
  11.  
  12. int x = raf.read();
  13. System.out.println(x);
  14.  
  15. raf.seek(10); // 在指定位置设置指针,可以用来多线程下载
  16. raf.write(98); // 在10的位置写下b
  17. raf.close(); // 关流
  18. }
  19. }

RandomAccessFile

数据输入输出流

* A:什么是数据输入输出流
  * DataInputStream,DataOutputStream可以按照基本数据类型大小读写数据
  * 例如按照Long大小写出一个数字,写出时,该数据占8个字节,读取的时候也可以按照Long类型读取,一次读取8个字节

* B:使用方式
  * DataOutputStream(OutputStream), writeInt(), writeLong()
  * DataInputStream(InputStream), readInt(), readLong()

  1. package com.heima.otherio;
  2.  
  3. import java.io.DataInputStream;
  4. import java.io.DataOutputStream;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9.  
  10. public class Demo9_Data {
  11.  
  12. public static void main(String[] args) throws IOException {
  13. // demo1();
  14. // demo2();
  15. // demo3();
  16. // demo4();
  17. }
  18.  
  19. public static void demo4() throws FileNotFoundException, IOException {
  20. DataInputStream dis = new DataInputStream(new FileInputStream("h.txt")); // 创建数据输入流,并关联文件
  21. int x = dis.readInt(); // 按照int数读取
  22. int y = dis.readInt();
  23. int z = dis.readInt();
  24.  
  25. System.out.println(x);
  26. System.out.println(y);
  27. System.out.println(z);
  28. dis.close(); // 关流
  29. }
  30.  
  31. public static void demo3() throws FileNotFoundException, IOException {
  32. DataOutputStream dos = new DataOutputStream(new FileOutputStream("h.txt")); // 创建数据输出流,并关联文件
  33. dos.writeInt(997); // 写入int数
  34. dos.writeInt(998);
  35. dos.writeInt(999);
  36. dos.close(); // 关流
  37. }
  38.  
  39. public static void demo2() throws FileNotFoundException, IOException {
  40. FileInputStream fis = new FileInputStream("h.txt");
  41. int x = fis.read(); // 读取时回按照byte形式读取,然后前面加上24个0
  42. int y = fis.read();
  43. int z = fis.read();
  44.  
  45. System.out.println(x);
  46. System.out.println(y);
  47. System.out.println(z);
  48. }
  49.  
  50. public static void demo1() throws FileNotFoundException, IOException {
  51. FileOutputStream fos = new FileOutputStream("h.txt");
  52. fos.write(997);
  53. fos.write(998);
  54. fos.write(999);
  55.  
  56. fos.close();
  57. }
  58. }

DataInputStream

Properties的概述和作为Map集合的使用

* A:Properties的概述
  * Properties类表示了一个持久的属性集
  * Properties可保存在流中或从流中加载
  * 属性列表中每个键及其对应值都是一个字符串

* B:Properties的特殊功能
  * public Object setProperty(String key, String value)
  * public String getProperty(String key)
  * public Enumeration<String> stringPropertyNames()

* C:Properties的 load() 和 store() 功能

* C:案例演示
  * Properties的特殊功能

  1. package com.heima.otherio;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.util.Enumeration;
  8. import java.util.Properties;
  9.  
  10. public class Demo10_Properties {
  11. // Properties 是Hashtable的子类
  12. public static void main(String[] args) throws IOException {
  13. // demo1();
  14. // demo2();
  15. // demo3();
  16. }
  17.  
  18. public static void demo3() throws IOException, FileNotFoundException {
  19. Properties prop = new Properties();
  20.  
  21. prop.load(new FileInputStream("config.properties")); // 将文件上的键值对读取到集合中
  22. prop.setProperty("tel", "18987654321"); // 此时只修改了内存中的值
  23. prop.store(new FileOutputStream("config.properties"), "..."); // 将内存中的数据写入文件中,第二个参数是对列表参数的描述,可以给值,也可以给null
  24. System.out.println(prop);
  25. }
  26.  
  27. public static void demo2() {
  28. Properties prop = new Properties();
  29. prop.setProperty("name", "张三");
  30. prop.setProperty("tel", "18912345678");
  31.  
  32. // System.out.println(prop);
  33. Enumeration<String> en = (Enumeration<String>) prop.propertyNames(); // 因为properties中没有泛型,所以默认是Object,转化为枚举时需要强转
  34. while (en.hasMoreElements()) {
  35. String key = (String) en.nextElement(); // 获取properties中的每一个键
  36. String valueString = prop.getProperty(key); // 根据键获取值
  37. System.out.println(key + "=" + valueString);
  38. }
  39. }
  40.  
  41. public static void demo1() {
  42. Properties prop = new Properties();
  43. prop.put("abc", 123);
  44. System.out.println(prop);
  45. }
  46. }

Properties

Java I/O流 04的更多相关文章

  1. Java IO: 字符流的Piped和CharArray

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader.Pip ...

  2. day37-IO流04

    JavaIO流04 4.常用的类03 4.4节点流和处理流02 4.4.5对象处理流-ObjectInputStream和ObjectOutputStream 1.序列化和反序列化 例子1: 看一个需 ...

  3. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  4. 【转】输入/输出流 - 深入理解Java中的流 (Stream)

    基于流的数据读写,太抽象了,什么叫基于流,什么是流?Hadoop是Java语言写的,所以想理解好Hadoop的Streaming Data Access,还得从Java流机制入手.流机制也是JAVA及 ...

  5. Java虚拟机JVM学习04 类的初始化

    Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始 ...

  6. 理解Java中字符流与字节流的区别

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

  7. Java Io 字符流

    Java Io 字符流包含: 1. InputStreamReader  它是由byte流解析为char流,并且按照给定的编码解析. 2. OutputStreamWrite  它是char流到byt ...

  8. mybatis oracle java.sql.SQLException: 流已被关闭问题

    /** * 按照页码取值(从current_page页开始,每页page_size条) * @param key * @param params * @param current_page * @pa ...

  9. Java IO包装流如何关闭?

      问题: (1)JAVA的IO流使用了装饰模式,关闭最外面的流的时候会自动调用被包装的流的close()方吗? (2)如果按顺序关闭流,是从内层流到外层流关闭还是从外层到内存关闭? 问题(1)解释: ...

随机推荐

  1. Codeforces Round #666 (Div. 2) C. Multiples of Length (构造,贪心)

    题意:有一个长度为\(n\)的序列,可以操作\(3\)次,每次选取一段区间,然后区间的元素加减区间长度的倍数,\(3\)次操作后使得序列所有元素为\(0\),问具体操作情况. 题解:假如我们能选择一整 ...

  2. 说说Golang goroutine并发那些事儿

    摘要:今天我们一起盘点一下Golang并发那些事儿. Golang.Golang.Golang 真的够浪,今天我们一起盘点一下Golang并发那些事儿,准确来说是goroutine,关于多线程并发,咱 ...

  3. 在kubernetes集群里集成Apollo配置中心(4)之dubbo服务提供者连接apollo实战

    1.登录portal.od.com(Apollo-portal),新建一个dubbo-demo-service项目 2.在Apollo项目中的dubbo-demo-service添加配置 (1)添加d ...

  4. 排序算法 以及HKU的一些数据结构 相关题目 以及 K叉树,二叉树 排列

    冒泡排序.选择排序.快速排序.插入排序.希尔排序.归并排序.基数排序以及堆排序,桶排序 https://www.cnblogs.com/Glory-D/p/7884525.html https://b ...

  5. Leetcode(10)-正则表达式匹配

    给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s) ,而不 ...

  6. cin的用法

    int val=0; cin>>val; 上述程序先定义了一个整型数据val,通过cin读取数据放在val中,如果输入的整型数据,则读取成功,返回的是>>左侧的对象,也就是is ...

  7. acm 快速傅里叶变换的理解

    A(x)=A4[0](x*x)+x*A4[1](x*x);x=1,w,w*w,w*w*wwi means w^in=4;w=w[4]result shuould bey[0]=A4[0](1*1)+1 ...

  8. 如何在 网站页面中插入ppt/pdf 文件,使用插件,Native pdf 支持,chrome,Edge,Firefox,

    1 经过测试:在网页中插入 ppt 不好使:可能是浏览器=>同源策略 error?             pdf 可以正常使用:   <前提:一定要放在服务器端才行!> 2 经过e ...

  9. Oh My Zsh All In One

    Oh My Zsh All In One https://ohmyz.sh/ install # CURL $ sh -c "$(curl -fsSL https://raw.github. ...

  10. Vue 组件之间通信 All in One

    Vue 组件之间通信 All in One 组件间通信 1. 父子组件之间通信 https://stackblitz.com/edit/vue-parent-child-commutation?fil ...