1. 字符流
1.1字符输入流 - Reader - FileReader
涉及到连接的,用完了就要关闭。
 
**为什么read方法  返回的值是 int,而不是char?因为读到结尾的时候,char不好使,结尾 int 就为 -1。
 
案例:编写一个字符输入流,来读取外部文件中的数据
根据数据流动的方向 - 输入流
根据操作的数据类型 - 字符流
字符输入流 - Reader(FileReader  前面是来的源,后面是操作)
 
1.2 字符输出流 - Writer - FileWriter
 
案例:编写一个流  来将指定的字符写出到外部文件中
 
1.3 关流的过程
        IO流用过之后必须保证关闭,但是 IO 流的代码中往往存在大量的异常,为了保证关流的操作一定会被执行,所以通过关流都在 finally 代码块中进行。而为了保证 finally 中可以看到流对象,通常
 
案例:编写一个程序,实现文件的拷贝
所谓的文件拷贝,实际上就是
 
1.4 使用缓冲区来提升程序的性能
 
1.5 使用缓冲流提升程序的性能
        功能:
               自带缓冲区  提升程序性能
               提供一些新方法,方便操作
        BufferedReader
 
        BufferedWriter
 
1.6 增强类的方式
a. 继承
    可以通过继承父类,在子类中增强能力,缺点是对父类对象无效。
b.装饰设计模式
    可以对已有对象生效
c.动态代理
 
1.7 装饰设计模式
    java中共有 23 种设计模式。装饰模式是其中的一种。所谓的设计模式,其实就是前人总结的写代码的套路。(动态代理,适配器)
    主要的功能:就是在原有的被装饰者的基础上增加其他能力。
    实现方式:
 
案例:为 Person 类通过装饰设计模式 使其能够飞
 
缓冲流 - BufferedReader 和 BufferedWriter 就是使用了装饰设计模式实现的。
实验:翻阅BufferedReader  BufferedWriter 的源代码。
 
1.8 字符流 - 其他字符流
    StringReader
        数据来源是字符串的字符流
案例:利用StringWriter以一段
 
字节流 - 字节输入流
    InputStream
 
字节流 - 字节输出流
    OutputStream
 
案例:通过字节流,直接实现文件的复制
 
2. 转换流
    字符流的底层也是字节流,只不过在字节流的基础上增加了缓冲区和编解码器。
    字符流内置的但是 java 提供的字符流  缓冲区和编解码器是无法调整的,这在使用
 
案例:拷贝一个 utf-8 编码集  包含中文的文本文件  要求产生的文件也是 utf-8/gbk。
 
3. 系统流
在java中有一个重要的类,叫做System,代表当前系统,
 
通过系统流向控制台写数据
 
系统输出流
 
修改标准系统输出流输出位置
 
系统输入流
 
修改标准系统输入流输入位置
 
打印流  系列化流
 
 
1. File
代表文件或者目录(文件夹)的类
 
练习:删除目录
思路分析:写一个单独的方法来删除目录或者文件:判断是一个目录(isDirectory)还是是一个文件(isFile);如果是文件直接删除,如果是目录,获取这个目录下的所有子目录和子文件 --- 后续功能和当前方法要完成的功能是一致的 --- 递归
 
练习:统计工作空间中 Java 文件和 class 文件的个数
思路分析:定义一个新的方法进行统计:先获取工作空间中所有的子文件和子目录。如果是子目录 --- 递归;如果是子文件,需要判断这个文件是否是一个 Java 文件还是一个class文件
 
Java API 中的方法前缀:
can 能不能
is 是不是
has 有没有
 
2. 路径
绝对路径:以盘符或者/开头的路径。指定的位置和文件当前的位置没有什么关系。
相对路径:不以盘符或者/开头的路径(跟后面的资源的定位有关系,比如一直)<!-- 锚 - 超链接 --> href。<!-- 相对路径如果不指定默认在当前的路径下寻找资源 -->
<!-- .. 表示往上蹦(上一级目录) -->。是以当前路径为基准来计算指定的文件的所在路径。
 
练习:以path.html 作为基准来找test.html
../../../c/f/test.html
 
3. IO流
(生活中,水流,电流,车流,很常见,总会让某些东西在里面流动和传递起来,计算机中能够流动的也就只有数据了)
用于数据的传输机制。IO -> Input Output Stream -> 输入输出流。数据从外部流向程序 - 输入流;数据从程序流向外部 - 输出流。读取文件  --  数据是从文件读到程序中 -> 输入流;向一个 TXT 文件中写入字符串 “abc” ->数据是从程序写到文件中 -> 输出流。
 
根据数据传输方向:输入流和输出流
根据数据传输形式:字符流和字节流
 
 
输入流
输出流
字符流
Reader
Writer
字节流
InputStream
OutputStream
四个基本的流都是抽象类。
数据的来源/目的地:存储设备(U盘、硬盘、光盘)、物理设备(话筒,麦克风)、内存(键盘中敲击)、网络(QQ、微信这些读取、接收的数据,其中套接字就是使用的网络)
 
向一个 TXT 文件中写入字符串 -> 输出流、字符流、和文件相关的流
 
4. 流的异常处理
1.将流对象放在try之外声明并且赋值为null;放到try之内进行初始化
2.在关流之前需要判断流对象是否为空
3.为了防止关流失败导致流依然占用文件,所以需要将流对象强制置为 null。
4.为了防止关流的时候自动冲刷缓冲区失败导致一部分数据产生丢失,需要在关流之前进行一次手动的冲刷
 
JDK1.7特性:
二进制 0b
int i = 100_000;
<>
try-with-resources
 
1. 其他流 - 打印流 - PrintStream
        本身是一个字节流  是一个装饰者  
 
1.1 打印流的优点:
  1.更多的类型的输出方法
  2.自动刷新流
  3.永远不抛出IOException
 
2. 其他流 - 打印流 - PrintWriter
       跟PrintStream类似
 
3. 其他流 - Java属性对象 - Properties
    (单独的一个工具,只是用到流里面的一些知识。)
    在 java.util包下有一个工具类Properties,可以用作java常用的配置对象来使用,可以在其中保存键值对的类型,而且此对象可以在流中构建,也可以写到
    从继承结构上来看,Properties 来自于集合类中的 HashTable,所以本身也可以存储键值对类型的数据。
 
3.1 properties文件
    java属性文件,通常用作java的配置文件来使用
    文件格式:
                    一行一个键值对
                    键和值之间用等号相连
                    通常其中不可以包含非 ISO8859-1 的字符  如果遇到非 ISO8859-1需要使用\转义 \u5F02:unicode编码
4. 序列化流
    java是面向对象的语言,对象是存活在虚拟机的内存中,是动态灵活可变的数据。
 
4.1 序列化、反序列化主要的目的:
    将对象序列化后保存到磁盘中,这个过程称之为将对象持久化,而将持久化的对象信息再读取回内存恢复为对象的过程,称之为反持久化。
 
4.2 serializable接口:
    想要实现序列化的接口
    没有任何要求实现的方法,此接口为一个标记接口,功能仅仅是用来声明当前类可以被序列化
 
4.3 java实现序列化/反序列化:
 
4.4 序列化中的 serialVersionUID:
    在序列化/反序列化中唯一的标识这个类,与当前类的属性紧密相关,所以不同的类的serialVersionUID是不同的。
    serialVersionUID 在需要的时候,可以自己指定,在当前的类中,通过静态的名为 serialVersionUID 属性指定(在网络传递对象时,在机器两端手动指定这个值相同,反序列化时就不会报错了!!值不同是为了保证类型转换时的安全性)
 
4.5 Transient 关键字
        实现了Serializable接口的类的属性上通过transient关键字来申明该属性不能被序列化。(某些比较重要的信息)实现在序列化时堆属性的隐藏。
        另外,静态的属性也不会被序列化,
        另外,集合类型也不会被序列化
        另外,类的属性如果是一个非基本类型
 
 
案例:实现将对象序列化/反序列化
 
5. 多线程
    5.1 进程和线程
        a.进程
            所谓的进程其实就是一个程序或服务(没有界面的程序,功能是背后提供一系列的支持,360 加速的原理就是将某些服务的启动改一下,如不能关闭,就转到进程直接关闭),操作系统中一个独立运行的程序或服务就是一个进程
        b.多进程
        c.线程
        d.多线程
        **计算机中只有一个cpu,实际上同一个时刻,只能处理一个运算,但是由于cpu的运算速度非常的快,通过不停的切换处理的任务,从而使多个进程多个线程一次都能得到处理,处理的很快,切换的也很快,人看来似乎这些进程和线程同时进行(CPU 的发展:286  386  586(不让用了) 奔腾(单核),酷睿(四核、八核)在处理多线程时可以做好多的事)
 
        **JVM也是一个进程,可以在其中开辟多个线程执行并发的任务,这样的开发多个线程的技术成为java多线程技术。
 
5.2 Java中的多线程
  5.2.1Thread 类
          java是面向对象的语言,万物皆对象。在java中也是用对象来代表底层的物理线程,来方便我们操作。这样的线程对象归属于Thread类。
 
  5.2.2 启动线程的过程:
      a.启动线程的方式一:
            
      b.启动线程的方式二:
 
5.3 两种线程启动方式的比较:
    java是单继承,继承的方式创建线程,将会占用extends关键字
    java是多实现的,实现接口的数量没有限制,
 
5.4 关闭线程:
        stop,已过时,不安全,现在已经都不用了。
        后面也没有提供任何类似的方法了,就给程序了一个开关,通常是boolean类型的。
      
 
5.5 线程并发的细节:
**主线程和其它线程没有什么特殊的地方,只是程序的入口。
**多个线程的并发过程中,在无序地、不停地争夺CPU,由于CPU运行地非常快,看起来似乎这些线程在并发的执行。
**只要进程活着,线程就活着。
 
5.6 线程的优先级:
 
5.7 多线程并发安全问题: 
        多个线程的执行顺序不确定,操作共享资源时,就有可能因为线程的无需执行,产生以写以外的情况。安全性!!(打印机中,如果有十个人都来争夺这个资源,产生多线程并发问题,就会这里打印一点,那里打印一点)
多线程并发安全问题产生的条件:
a.有共享资源
b.有线程并发操作了共享资源
c.有线程并发操作了共享资源且涉及到了修改操作
 
 
5.8 解决多线程并发安全问题:
    破坏产生多线程并发问题的条件
    禁止共享资源 -- 有些情况下是可以的  例如买火车票的例子  --- ThreadLocal
    禁止多线程并发操作 ---Syncronized代码块
    禁止修改 --- ReadWriteLock
 
5.9 Syncronized 代码块的使用:
    原理:
            锁对象可以任意的选择,但是要保证并发的线程操作的都是同一个锁对象。
    语法:
            syncronized(锁对象){要同步的代码}
 
 
 

Java中的流操作的更多相关文章

  1. java中有关流操作的类和接口

    一.java操作l流有关的类和接口 1.File 文件类 2.RandomAccessFile 随机存储文件类 3.InputStream 字节输入流 4.OutputStream 字节输出流 5.R ...

  2. java中IO流操作的标准异常类

    package 加入异常处理的字节流操作; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ...

  3. Java中Io流操作-File类的常用操作-创建文件,创建文件夹

    package com.hxzy.IOSer; import java.io.File;import java.io.IOException; public class Demo03 { public ...

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

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

  5. Java中IO流的总结

    有关Java中IO流总结图 流分类 按方向分 输入流 输出流 按单位分 字节流 字符流 按功能分 节点流 处理流(过滤流) 其他 所有的流继承与这四类流:InputSteam.OutputStream ...

  6. 理解Java中字符流与字节流

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

  7. 理解Java中字符流与字节流的区别(转)

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

  8. Java中的流(2)字节流-InputStream和OutputStream

    字节流的两个顶层类是抽象类:InputStream和OutputStream 1. OutputStream void write(int b) 往流中写一个字节b void write(byte b ...

  9. Java中的IO操作和缓冲区

    目录 Java中的IO操作和缓冲区 一.简述 二.IO流的介绍 什么是流 输入输出流的作用范围 三.Java中的字节流和字符流 字节流 字符流 二者的联系 1.InputStreamReader 2. ...

  10. JAVA中的时间操作

    java中的时间操作不外乎这四种情况: 1.获取当前时间 2.获取某个时间的某种格式 3.设置时间 4.时间的运算 好,下面就针对这四种情况,一个一个搞定. 一.获取当前时间 有两种方式可以获得,第一 ...

随机推荐

  1. 每日学学Java开发规范,常量定义(附阿里巴巴Java开发手册(终极版))

    前言 每次去不同的公司,码不同的代码,适应不同的规范,经常被老大教育规范问题,我都有点走火入魔的感觉,还是要去看看阿里巴巴Java开发规范,从中熟悉一下,纠正自己,码出高效,码出质量. 想细看的可以去 ...

  2. 19.使用kubeadm-ha脚本一键安装K8S

    使用kubeadm-ha脚本一键安装K8S 前情提示 以前安装k8s集群的时候使用的是k8s官网的教程 使用的镜像源都是国外的 速度慢就不说了 还有一些根本就下载不动 导致安装失败 ,使用一个开源的一 ...

  3. GetUrlParam:获取Url参数,返回一个对象

    function GetUrlParam(){ let url = document.location.toString(); let arrObj = url.split("?" ...

  4. 二、FreeRTOS学习笔记-移植

    FreeRTOS移植 首先准备一个基础工程,stm32标准库或者HAL库,本实验使用HAL库版本的内存管理实验进行移植 移植步骤: 1 第一步:添加FreeRTOS源码(添加FreeRTOS源码的目的 ...

  5. php-fpm相关操作

    php-fpm常用操作 一. php5.3.3之后使用新号方式控制php-fpm进程 INT, TERM 立即终止 QUIT 平滑终止 USR1 重新打开日志文件 USR2 平滑重启所有worker进 ...

  6. Elasticsearch之常见问题

    一. 聚合操作时,报Fielddata is disabled on text fields by default GET /megacorp/employee/_search { "agg ...

  7. 2024-11-27:字符串的分数。用go语言,给定一个字符串 s,我们可以定义其“分数”为相邻字符的 ASCII 码差值绝对值的总和。 请计算并返回字符串 s 的分数。 输入:s = “hello“

    2024-11-27:字符串的分数.用go语言,给定一个字符串 s,我们可以定义其"分数"为相邻字符的 ASCII 码差值绝对值的总和. 请计算并返回字符串 s 的分数. 输入:s ...

  8. 2-SQL注入渗透与攻防

    1.SQL注入基础 1.1 什么是sql注入 一.SQL注入概述 二.数据库概述 1.关系型数据库 关系型数据库,存储格式可以直观的反映实体间的关系,和常见的表格比较相似 关系型数据库中表与表之间有很 ...

  9. 德承工控机DA-1000 RS-485串口设置

    由于一般情况下调试串口常使用RS-485转USB接口来进行调试,但是USB接口在长时间的调试下,接口容易松动,通讯也比较不稳定容易中断,所以改为DB9接口的RS-485来调试,稳固不松脱.抗干扰能力强 ...

  10. OS之《内存管理》

    程序装入方式 绝对装入:程序逻辑地址和物理地址是完全对应的.不现实 可重定位装入:装入的时候重新 计算内存地址.程序中的实际地址加上程序载入的起始地址:但是解决不了进程挂起 后重新唤醒的问题.唤醒的后 ...