没有合适的资源?快使用搜索试试~ 我知道了~
详解Java中字符流与字节流的区别
5星 · 超过95%的资源 3 下载量 69 浏览量
2020-09-02
11:59:29
上传
评论
收藏 64KB PDF 举报
温馨提示
试读
2页
主要为大家详细介绍了Java中字符流与字节流的区别,这两个的概念易混淆,今天就为大家进行详细区分,感兴趣的小伙伴们可以参考一下
资源推荐
资源详情
资源评论
详解详解Java中字符流与字节流的区别中字符流与字节流的区别
主要为大家详细介绍了Java中字符流与字节流的区别,这两个的概念易混淆,今天就为大家进行详细区分,感
兴趣的小伙伴们可以参考一下
本文为大家分析了Java中字符流与字节流的区别,供大家参考,具体内容如下
1. 什么是流什么是流
Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水
流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流;能够向其写入一个字节
序列的对象被称为输出流。
2. 字节流字节流
Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。Java中最基本的两个字节流类是InputStream
和OutputStream,它们分别代表了组基本的输入字节流和输出字节流。InputStream类与OutputStream类均为抽象类,我们在
实际使用中通常使用Java类库中提供的它们的一系列子类。下面我们以InputStream类为例,来介绍下Java中的字节流。
InputStream类中定义了一个基本的用于从字节流中读取字节的方法read,这个方法的定义如下:
public abstract int read() throws IOException;
这是一个抽象方法,也就是说任何派生自InputStream的输入字节流类都需要实现这一方法,这一方法的功能是从字节流中
读取一个字节,若到了末尾则返回-1,否则返回读入的字节。关于这个方法我们需要注意的是,它会一直阻塞知道返回一个读
取到的字节或是-1。另外,字节流在默认情况下是不支持缓存的,这意味着每调用一次read方法都会请求操作系统来读取一个
字节,这往往会伴随着一次磁盘IO,因此效率会比较低。有的小伙伴可能认为InputStream类中read的以字节数组为参数的重
载方法,能够一次读入多个字节而不用频繁的进行磁盘IO。那么究竟是不是这样呢?我们来看一下这个方法的源码:
public int read(byte b[]) throws IOException {
return read(b, 0, b.length);
}
它调用了另一个版本的read重载方法,那我们就接着往下追:
public int read(byte b[], int off, int len) throws IOException {
if (b == null) {
throw new NullPointerException();
} else if (off < 0 || len < 0 || len > b.length - off) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return 0;
}
int c = read();
if (c == -1) {
return -1;
}
b[off] = (byte)c;
int i = 1;
try {
for (; i < len ; i++) {
c = read();
if (c == -1) {
break;
}
b[off + i] = (byte)c;
}
} catch (IOException ee) {
}
return i;
}
从以上的代码我们可以看到,实际上read(byte[])方法内部也是通过循环调用read()方法来实现“一次”读入一个字节数组的,
因此本质来说这个方法也未使用内存缓冲区。要使用内存缓冲区以提高读取的效率,我们应该使用BufferedInputStream。
3. 字符流字符流
Java中的字符流处理的最基本的单元是Unicode码元(大小2字节),它通常用来处理文本数据。所谓Unicode码元,也就
是一个Unicode代码单元,范围是0x0000~0xFFFF。在以上范围内的每个数字都与一个字符相对应,Java中的String类型默认
就把字符以Unicode规则编码而后存储在内存中。然而与存储在内存中不同,存储在磁盘上的数据通常有着各种各样的编码方
式。使用不同的编码方式,相同的字符会有不同的二进制表示。实际上字符流是这样工作的:
资源评论
- 小明斗2023-07-27这篇文件给出了一些关于字符流和字节流的实例代码,非常实用。
- 城北伯庸2023-07-27文章内容简洁明了,让我更加深入地理解了字符流和字节流的概念和用法。
- 我要WhatYouNeed2023-07-27这篇文章通过生动的例子和清晰的结构,使得我对字符流和字节流的区别有了更清晰的认识。
- 曹多鱼2023-07-27作者深入浅出地解释了字符流和字节流的异同点,让我能够更轻松地掌握这个概念。
- 代码深渊漫步者2023-07-27这篇文章详细讲解了Java中字符流与字节流的区别,对于初学者来说非常有帮助。
weixin_38700320
- 粉丝: 3
- 资源: 931
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功