现在的位置: 首页 > 综合 > 正文

第十九天:IO流

2018年05月16日 ⁄ 综合 ⁄ 共 2717字 ⁄ 字号 评论关闭

InputStream 字节输入流

InputStreamReader
InputStream (byte) -> Unicode(char)

Reader 字符输入流

1 打开一个文本文件:
InputStream is = new FileInputStream("gbk.txt");
Reader in = new InputStreamReader(is);

2 打开一个文本文件:
Reader in = new InputStreamReader(
new FileInputStream("gbk.txt"));

//InputStreamReader有一个简化形式就是FileReader。

3 打开一个文本文件:
Reader in = new FileReader("gbk.txt");

4 打开输出文本文件
Writer out = new OutputStreamWriter(
new FileOutputStream("filename"));

5 打开输出文本文件
Writer out = new FileWriter("filename");

//其实打开输出文本文件最常用的不在上面,而是PrintWriter.
文本文件的输出:
PrintWriter out = 
new PrintWtirer(new FileWriter(filename));

//而且在这个类上定义了一个特别方便的方法。println。它定义了无数的重载的print和println方法。
out.println("HI");
//其实我们天天用的这个就是一个输出流。
System.out.println("Hello");

文本文件的读取: BufferedReader,方法:readline();

//Stream中的read是按照字节读取,Reader的read是按照字符读取。

阻塞式IO
等待用户的输入完成再继续运行程序的现象叫: 阻塞式IO
BufferedReader: readLine()
Scanner: next() nextLine() nextInt() ...

 总结 :在日常生活中,最常用的读取文本文件的BufferedReader,写入最常用的是PrintWriter
    
BufferedReader bufferedReader = new BufferedReader(
new FileReader("questions.txt"));
PrintWriter out = 
new PrintWtirer(new FileWriter(filename));
 这两个类的使用参看PrintWriteDemo.java和ReaderDemo.java

//FileReader是InputStreamReader的简化形式。 
//FileWriter是OutStreamWriter的简化形式。 
  
    
     
对象序列化
  int -> 4个byte,流
  long -> 8个byte, 流
  String 5个字符 -> GBK编码 10个Byte流
 
  Object -> n个byte流

1 ObjectOutputStream 和 ObjectInputStream
  writeObject(obj) 和 readObject()
  
 ByteArrayOutputStream outputStream = new 
ByteArrayOutputStream(); 
把数据写入到内存中,在内存中以byte数组的形式存储。

javabean中的一个重要规定,只有实现了序列化,才能保证我们的对象随时写到一个
内存中或者流中。implements Serializable

二维数组
1 声明: 
  int[][] ary;
  
2 初始化
  静态初始化: 
    int[][] ary = {{2,3},{4,5},{6,7,8}};
  动态初始化:
    int[][] ary = new int[3][2];//3行2列
    int[][] ary = new int[3][];
    int[][] ary = new int[][]{{2,3},{4,5},{6,7,8}};

二维数组:是数组的数组, 数组变量是一个对象数组的引用, 每个
行是一个一维数组的实例.

  int[] a = ary[0];//只把第一维数组给它。
  Object[] o = ary;
 
  int[][] ary = {{2,3},{4,5},{6,7}};
int[] sum = new int[ary[0].length];
int[] sum2 = ary[0];

for (int i = 0; i < ary.length; i++) {
for (int j = 0; j < ary[i].length; j++) {
System.out.println(ary[i][j]);
}
}
System.out.println("===========");
for (int i = 0; i < sum.length; i++) {
System.out.println(sum[i]);
}
System.out.println("===========");
for (int i = 0; i < sum2.length; i++) {
System.out.println(sum2[i]);
}
//System.out.println(Arrays.toString(sum)); 
  

程序, 进程 和 线程 
程序: 没有执行的指令序列和相关的数据的集合(如: qq.exe)
     如: 磁盘上的可执行命令.
进程: 正在执行的程序, 进程占用资源(CPU, Memoary, IO)  
线程: 是进程中并发运行的过程(共享进程资源)
//所有的程序在计算机内部都是走走停停
同步: 步调一致的顺序执行, 如:上公交车, 一个一个上车
异步: 步调不一致的同时执行, 如: 大家一起上卡车

线程: 名词->类
  Thread 类中包含一个方法 run() 这个方法就是独立运行的
  过程
  Thread 类 中还包含方法start() 用来启动独立运行的run()

创建并启动一个线程:
  1 要覆盖(匿名类、内部类、普通类均可)Thread类的run() 方法, 提供独立运行的过程
  2 调用Thread实例的start() 方法启动 run() 过程.
 
 如果调用的t2.run()那么这就是一个普通的方法,与线程无关,只有t2.start()才会
启动线程。

线程在cpu那里就是你执行一会我执行一会,也就是时间片你有一会我也有一会,不过
同一时间只能执行一个。
  
线程的状态:
 [新建 new] --> [可运行(Runnable)] <--> [运行态(Running)]

所以系统中的线程大多数存在于Runnable,而只有一个处于Running。
而系统让大家都执行一小会,宏观来看,大家都在执行。

软件执行时候至少包含main线程    

抱歉!评论已关闭.