IO流以及多线程的学习

IO流的学习:
  io流:用于处理设备上的数据。
    设备:硬盘,内存,键盘录入等。


IO有具体的分类:
    1.根据我们处理的数据类型不同:字节流和字符流
    2.根据流向的不同:又分为输入流和输出流。


字符流的由来:   
     因为文件编码的不同,而有了对字符进行高效操作的字符流对象。   
     原理:其实就是基于字节流读取字节时,去查了指定的码表。  


  字节流和字符流的区别:   
     1,字节流读取的时候,读到一个字节就返回一个字节。     
        字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8    码表中是3个字节)时。
        先去查指定的编码表,将查到的字符返回。   
     2,字节流可以处理所有类型数据,如图片,mp3,avi。      
        而字符流只能处理字符数据


 我们得出一个结论:只要是处理纯文本数据,就要优先考虑使用字符流。除此之外都用字节流。 
 
IO的体系。所具备的基本功能就有两个:读 和 写。
      1,字节流   InputStream(读),OutputStream(写)。  
      2,字符流:   Reader(读),Writer(写)。     
   java中流根据流的流向把流分为两种:
       
        输入流:  
          InputStream  , FileInputStream , FileReader
        输出流:
          OutputStream , FileOutputStream ,FileWriter
          
        如何区分输入还是输出流:
              看类名是否存在Input或者Reader 如果有就是输入流 ,反之如果有Output或者Wirter 就是输出流
        什么时候使用输出流什么时候使用输入流:
         需要以程序为参考点: 如果数据是读取到程序这个时候使用输入流,反之如果数据是写入到硬盘中需要使用的是输出流。
         
        根据流的操作:
        1.字节流: 字节流操作的数据是二进制数据,不会做任何操作。
          
                                   特点:存在Input或者Output的流
          
        2.字符流: 字符流操作的数据也是二进制数据,会将二进制数据转换为我们能够看得懂的字符。
          97--> a
                             字符流  = 字节流 + 解码
                             
                               特点:存在Reader或者Wirter
                               
    先来学习字节流:
    InputStream:是所有字节输入流的超类 ,抽象的类
         FileInputStream : 文件字节输入流,用来读取文件中的 数据到内存中。
         BufferedInputStream : 自带有一个缓冲区 ,内部会帮我们定义一个byte类型的数组 
         
    
         
         
   FileInputStream的使用步骤:
       1.找到你需要读取的目标文件 
       2.建立通道
       3.读取数据  read() 一次只能读一个字节
       4.关闭资源,释放资源。
    
    FileOutputStream 使用注意点:
      1.写入数据的时候如果该文件存在会覆盖当前文件的内容
      2.如果没有指定的文件,他会默认创建一个。
      3.如果需要追加数据 需要使用FileOutputStream(File file, boolean append) 
                 构造方法。append 如果true 就表示追加。
                 
    BufferedOutputStream注意点:
       1.写入数据的时候,必须要关闭资源或者调用flush()方法,才能将数据写入到指定的文件中。
       
2.输入字符流:
     Reader:他是输入字符流的超类 ,也是一个抽象的类
        InputStreamReader: 转换流 ---> 将s输入字节流转为输入字符流
            FileReader: 文件字符流
        BufferedReader: 缓冲字符输入流
 3.ObjectOutputStream:对象流 
             将一个java中的对象写入到文件中。
        
        ObjectOutputStream使用注意点:
         1.必须要序列化的类才能通过对象流进行写入数据 ,实现 Serializable接口      
         2.读取数据的时候要保证serialVersionUID一致,否则就会读取失败
         3.如果你不想让某个属性写入到文件中可以使用transient来修饰属性
             
4.Properties 实际是一个集合  --->Map 键值对 
   Properties存值也是采用键值对。  键和值都是字符串类型。
   Properties作用: 用来创建配置文件和读取配置文件   jdbc


5.打印流: PrintStream.  System.out  --->标准输出流


二.线程:


1多线程概述
进程:
正在运行的程序,是系统进行资源分配和调用的独立单位。


     每一个进程都有它自己的内存空间和系统资源。


线程:


  是进程中的单个顺序控制流,是一条执行路径
一个进程如果只有一条执行路径,则称为单线程程序。


  一个进程如果有多条执行路径,则称为多线程程序。
  
2.多线程
(1)多线程:一个应用程序有多条执行路径
进程:正在执行的应用程序
线程:进程的执行单元,执行路径
单线程:一个应用程序只有一条执行路径
多线程:一个应用程序有多条执行路径

多进程的意义?
提高CPU的使用率
多线程的意义?
提高应用程序的使用率


一个Java程序至少有几个线程?
    至少有两个线程: 一个是main线程 , 垃圾回收线程。
    
3.使用线程的好处:
   1.实现一个程序中执行多个任务
   2.增强了cup的利用率。
   
4.使用线程不好的地方:
    1.降低cup执行效率。
    2.线程会出现线程安全问题
    3.线程的死锁
    4.会将降低这个线程的执行效率。
  
5.线程中常用的方法:
    Thread(String name)     初始化线程的名字
  getName()             返回线程的名字
  setName(String name)    设置线程对象名
  sleep()                 线程睡眠指定的毫秒数。
  getPriority()             返回当前线程对象的优先级   默认线程的优先级是5  
  setPriority(int newPriority) 设置线程的优先级    虽然设置了线程的优先级,但是具体的实现取决于底层的操作系统的实现(最大的优先级是10 ,最小的1 , 默认是5)
  。                                                                                   优先级只能提高线程执行的概率  1-10
  currentThread()      返回CPU正在执行的线程的对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值