2021-07-29 Java课堂笔记Day13

1.字节缓冲流

构造方法

BufferedInterStream:

BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。

BufferedOutputedStream:

BufferedInputStream(InputStream in) 创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。
BufferedInputStream(InputStream in, int size) 创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。

BufferOutputStream 内部带有缓冲区,写数据的时候先写入缓冲区,缓冲区满后才会把缓冲区的内容写到磁盘中。用 flush 或 close 方法可使未满缓冲区的数据写入磁盘

flush 方法 只刷新缓冲流,不释放资源

close 方法 在关闭流,释放资源之前,会先刷新缓冲流

缓冲流构造方法只需要字节流的原因:

字节缓冲流仅提供缓冲区,真正读写数据还是要字节流的对象的操作

2 字符流

2.1 为什么出现字符流

字节流操作中文不是特别方便,因此出现了字符流

​ 字符流 = 字节流 + 字符集

中文字节存储方式

用字节流复制文本时,最终底层操作会自动进行字节拼接成中文

如何识别中文

​ 汉字在存储时,无论是哪种编码存储,第一个字节都是负数

2.2 字符串中的编码和解码的问题

编码:将字符转换成字节数组

方法:

byte[]getBytes() 使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。
byte[]getBytes(String charsetName) 使用命名的字符集将此 String编码为字节序列,将结果存储到新的字节数组中。

解码:将字节数组转换为字符

方法:

StringString(byte[] bytes, String charsetName) 构造一个新的String由指定用指定的字节的数组解码[charset] 。

编码和解码必须使用相同码表,否则会乱码

2.3 字符流中的编码问题

字符流的抽象基类:

​ Reader:字符输入流的抽象基类

​ Writer:字符输出流的抽象基类

字符流中和编码相关的类:

  • InputStreamReader是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为[字符] 。它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。
  • OutputStreamWriter是字符的桥梁流以字节流:向其写入的字符编码成使用指定的字节charset 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

构造方法:

InputStreamReader:

  • InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。

  • InputStreamReader(InputStream in, String charsetName) 创建一个使用命名字符集的InputStreamReader。

OutputStreamReader:

  • OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。

  • OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用命名字符集的OutputStreamWriter。

2.4 字符流的读写方式

写:

voidwrite(char[] cbuf, int off, int len) 写入字符数组的一部分。
voidwrite(int c) 写一个字符
voidwrite(String str, int off, int len) 写一个字符串的一部分。
voidwrite(String str) 写一个字符串
voidwrite(char[] cbuf) 写入一个字符数组。

读:

intread() 读一个字符
intread(char[] cbuf, int offset, int length) 将字符读入数组的一部分。
intread(char[] cbuf) 将字符读入数组。

刷新和关闭:

voidclose() 关闭流,先刷新。
voidflush() 刷新流。

字符流可用于纯文本文件复制

字符流自带缓冲区

2.5 字符流操作的便捷类

FileReader 是InputStreamReader的简洁形式

FileWrite 是OutputStreamReader的简洁形式

2.6 字符缓冲流

BufferedReader

从字符输入流读取文本,缓冲字符,以提供 字符,数组和行的高效读取

可以指定缓冲区大小,或者可以使用默认大小。

BufferedReader(Reader in)创建使用默认大小输入缓冲区的缓冲字符输入流
StringreadLine() 读一行文字。

BufferedWriter

将文本写入字符输出流,缓冲字符,以提供 单个字符,数组和字符串的高效写入

可以指定缓冲区大小,或者可以接受默认大小。

BufferedWriter(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
voidnewLine() 写一行行分隔符。

2.7 IO流小结

字节流可以复制文件数据,有四种方式,一般采用字节缓冲流一次写一个字节数组的形式

字节流

  • 字节输入流(InputStream)
    • 方法:read()、read(byte[] b)、read(byte[] b,int off ,int len)
    • FileInputStream
    • BufferedInputStream(缓冲)
  • 字节输出流(OutputStream)
    • 方法:write()、write(byte[] b)、write(byte[] b,int off ,int len)、
    • FileOutputStream
    • BufferedOutputStream(缓冲)

字符流

  • 字符输入流(Reader)
    • 方法:read()、read(char[] cbuf)、read(char[] cbuf, int offset, int length)
    • InputStreamReader / FileReader(简式)
    • BufferedReader(缓冲)
  • 字符输出流(Writer)
    • 方法:writer(int c)、writer(char[] cbuf)、writer(char[] cbuf,int off,int len)、writer(String str)、writer(String str,int off,int len)
    • OutputStreamWriter / FileWriter(简式)
    • BufferedWriter(缓冲)

3 标准输入输出流

static PrintStreamerr “标准”错误输出流。
static InputStreamin “标准”输入流。 默认指的键盘
static PrintStreamout “标准”输出流。 默认是屏幕

3.1 标准输入流

InputStream is = System.in; (字节流输入)

InputStreamReader isr = new InputStreamReader(is) (字节流转字符流)

3.2 标准输出流

PrintStream ps = System.out;

4 打印流

打印流可分为字节打印流(PrintStream)和字符打印流(PrintWtriter)

打印流特点:

只能输出数据,不能读取数据

有一些特有的方法

5 对象的序列化流

对象序列化:将对象保存到磁盘或在网络中传输对象,为了对象保存的正确性和传输的安全性,将对象进行编码处理,这种处理方法称之为对象的序列化

反序列化:将序列化的目标解析为原对象

  • ObjectOutputStream (序列化)

  • ObjectInputStream (反序列化)

对于对象传输,对象必须实现java.io.Serializable 接口

6 Porperties

Porperties 是Map集合的一个实现类

Porperties可以保存到流中或从流中加载

属性列表中的键和对应的值都是字符串

Porperties 和 IO 流结合的方法:

voidload(InputStream inStream) 从输入字节流读取属性列表(键和元素对)。
voidload(Reader reader) 以简单的线性格式从输入字符流读取属性列表(关键字和元素对)。
voidstore(OutputStream out, String comments) 将此属性列表(键和元素对)写入此 Properties表中,以适合于使用 load(InputStream)方法加载到 Properties表中的格式输出流。
voidstore(Writer writer, String comments) 将此属性列表(键和元素对)写入此 Properties表中,以适合使用 load(Reader)方法的格式输出到输出字符流。

7 多线程

7.1 进程 线程 程序

程序:为了完成特定任务,用某种语言编写的一组指令的集合。 是一个静态过程

进程:是程序的一次执行过程或正在运行的程序。是一个动态过程,有自身的产生、存在、消亡的过程,称之为生命周期。作为资源分配单位,系统在运行时会为每个进程分配不同的内存区域。

线程(thread):是进程的进一步细化,是程序内部的一条执行路径。

若一个进程同一时间执行多个线程,就是支持多线程。

线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器,线程的切换开销比较小。

一个进程的多个线程共享相同的内存单元和内存地址空间,从同一个堆中分配对象,可以访问相同的变量和对象,这使得线程间的通信变得简便高效。但多线程操作共享的系统资源可能会有安全隐患,如多个线程同时选择同一变量或对象。

单核CPU(伪多线程处理器)和多核CPU(多线程处理器)

java中,一个程序至少有三个线程,主线程(main)、垃圾回收线程(gc)、异常处理线程

并行和并发

  • 并行:多个CPU同时执行多个任务
  • 并发:一个CPU在同一时刻,同时处理多个任务

多线程优点:

  • 提高应用程序的响应
  • 提高计算机CPU的利用率
  • 改善程序结构

何时需要多线程

  • 程序要同时执行两个或多个任务时
  • 程序有需要等待的任务时 如:用户输入、文件读写、网络操作等
  • 需要后台运行的程序时

7.2 实现多线程

创建多线程的两种方法:

  • 一个是将一个类声明为Thread的子类。 这个子类应该重写Thread的run方法 。 然后可以分配并启动子类的实例
  • 另一种方法来创建一个线程是声明实现类Runnable接口。 那个类然后实现了run方法。 然后可以分配类的实例,在创建Thread时作为参数传递,并启动
7.2.1 实现线程的方式一 :继承Thread类

步骤:

  1. 自定义一个线程类,继承 Thread 类,并重写 run 方法
  2. 在 main 方法中创建线程对象,创建时对象指向自定义线程类
  3. 调用线程对象的 start 语句

为什么要重写 run 方法

​ 因为 run 方法是用来封装被线程执行的代码

run 方法和 start 方法的区别

run() 封装了线程执行的代码,直接调用相当于普通方法调用

start() 启动线程,然后由JVM调用此线程的run方法

7.2.2 实现线程的方式二:实现Runnable接口

Runnable接口应由任何类实现,其实例将由线程执行。 该类必须定义一个无参数的方法,称为run

步骤:

  1. 自定义一个线程类,实现 Runnable 接口,并重写 run 方法
  2. 在 main 方法中创建实现类对象,并将实现类对象作为创建的线程对象的形参
  3. 调用线程对象的 statr 语句
  4. 或者在创建线程对象时用匿名内部类实现接口

7.3 设置和获取线程的名称

Thread(String name) 分配一个新的 Thread对象。
voidsetName(String name) 将此线程的名称更改为等于参数 name
voidsetName(String name) 将此线程的名称更改为等于参数 name
static ThreadcurrentThread() 返回对当前正在执行的线程对象的引用。

7.4 线程的优先级

intgetPriority() 返回此线程的优先级。
voidsetPriority(int newPriority) 更改此线程的优先级。

每个线程都有优先权,具有较高优先级的线程由于优先级较低的线程执行

线程的两种调度模型

  • ​ 分时调度:所有线程轮流实现CPU的使用权,平均分配每个线程占有CPU的时间片
  • ​ 抢占式调度:随机选择一个线程执行,优先度高的线程被选中的概率更高

java是抢占式的调度模型

线程默认优先级为5,优先级范围是1~10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值