第14天0312 字符流 节点流与处理流 序列化 多线程

  • 字符流
    • 字符输入流Reader
      • 常用的方法,跟字节输入流InputStream中的read方法相同,就是把参数类型由byte改为char
    • 字节输出流Writer
      • 常用方法,除了包含字节输出流OutputStream中的write方法,参数类型由byte改为char,还包含如下:
        • void write(int ch) 写单个字符
        • void write(String str) 写字符串
        • void write(String str, int offset, int len) 将字符串str从offset开始,写len个长度到输出流中
  • 节点流与处理流
    • 节点流 程序直接从数据读写数据,没有中间商。
    • 处理流
      • 如果只是按照字节或者字符来操作文件,实际应用中有弊端,不能按行读入,不能读取一定格式的数据。为了解决此问题,java提供了处理流
      • 处理流相当于从数据源读写的数据,经过中间商的一次再加工。
      • 处理流在创建对象时,需要传入另外一个流作为参数,一般节点流对象做参数
      • 构造方法 以BufferedInputStream/BufferedOutputStream为例
        • BufferedInputStream(InputStream in) 使用字节输入流对象构造一个缓冲输入流对象,默认带8k字节的缓冲区
        • BufferedInputStream(InputStream in,int len) 使用字节输入流对象构造一个缓冲输入流对象,指定缓冲区的长度为len
        • BufferedOutputStream(OutputStream out) 使用字节输出流对象构造一个缓冲输出流对象,默认带8k字节的缓冲区
        • BufferedOutputStream(OutputStream out,int len) 使用字节输出流对象构造一个缓冲输出流对象,指定缓冲区的长度为len
      • 常用的方法
        • read 与write包含之前的方法,除此之外,还包含如下:
          • String readLine(); 一次读取文件的一行,读到文件结束返回null BufferedReader中的方法
          • newLine() 输出一个换行
          • append()输出流的尾部追加
  • 对象的序列化与反序列化
    • 序列化是指将对象转为字节序列的过程
    • 反序列化是指将字节序列转为对象的过程
    • 应用场景:
      • 1、将对象永久保存到文件中
      • 2、网络传递对象
      • 3、进程中传递对象
    • ObjectInputStream与ObjectOutputStream
      • 要序列化的对象,要支持序列化,需要实现Serializable接口,该接口不需要实现任何方法。
      • 序列化 ObjectOutputStream writeObject(obj) 将obj对象序列化为字节序列写到输出流中。
      • 反序列化 ObjectInputStream readObject() 将字节序列读入,并转为对象,反序列化
    • transient关键字
      • 在类中,如果属性使用transient修饰,该属性的值不参与序列化,static修饰的属性也不参与。
  • 多线程
    • 进程与线程
      • 进程 计算机运行的一个软件(程序),每个进程有自己独有的代码和数据空间,进程之间的切换会有较大的资源开销。
      • 线程 一个程序(进程)中内部的多个控制流,一个进程可以包含多个线程,线程之间的切换开销很小。
    • 线程创建的两种方式
      • 1、继承Thread类
        • 1)继承Thread类,重写run()方法(该线程所实现的功能写在run的方法体中)
        • 2)创建该类的对象
        • 3)对象名.start() 开始执行线程
      • 2、实现Runnable接口
        • 1)实现Runnable接口,并重写run方法
        • 2)创建该实现类的对象
        • 3)然后创建一个Thread对象,将2)中的对象传入到构造函数中
        • 4)Thread对象.start()启动线程。
      • 两种方式比较
        • 1、继承方式,该类就不能再继承其他的父类了,如果是接口实现方式,还可以继承其他的父类。因为java中是单一继承,多接口实现。
        • 2、这两种方式本质上都是调用Thread中的run方法实现线程的功能。
    • 线程的生命周期
      • 线程对象从创建开始,到线程的结束,在此存在不同的状态:
        • 创建状态:new关键字创建之后,就处于新建状态
        • 就绪状态:对象调用start方法之后,进入就绪状态,或者从堵塞状态解除堵塞后,也会进入就绪状态
        • 运行状态:线程被调度器执行
        • 堵塞状态:在运行中的线程如果遇到堵塞事件,会进入堵塞状态。
        • 终止状态:线程运行结束,或者产生异常导致结束。
    • 线程的主要方法
      • sleep(millis) Thread类中的静态方法,接收一个以毫秒为单位的整数,表示让线程休眠多少毫秒。需要使用try-catch来处理InterruptedException异常。
      • isAlive() 判断线程是否存活
      • Thread.currentThread.getName();获取当前运行线程的名字
      • setName(String name) 可以通过线程对象给线程设置名字。
      • yield()让出该线程的cpu资源给其他线程。
    • 线程优先级
      • 处于就绪状态的线程,如果有多个,线程调度器在选择执行就绪状态的线程时,会根据优先级的高低不同,来优先选择级别高的执行。
        • 注意:优先选择,仅仅是指优先级高的线程被选中的概率要比优先级低的概率大。
        • 线程的优先级分为10个等级,1~10,默认是5,数字越大级别越高。
        • Thread.MAX_PRIORITY //10 表示最高优先级
        • Thread.NORM_PRIORITY //5 表示默认优先级
        • Thread.MIN_PRIORITY //1 表示优先级最低
        • setPriority(int ) //设置线程的优先级
        • getPriority() 查看线程的优先级
    • 线程的终止
      • 一般情况要终止线程,使用标志位来判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值