第十九天:IO流

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线程    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值