JavaIO——字节与字符数组

在Java中,经常使用字节或是字符数组临时存储数据,这些数组又经常是数据的来源或是目的地。我们可以直接通过索引值来使用数组中的数据,也可以通过流来使用这些数组

ByteArrayInputStream与ByteArrayOutputStream

ByteArrayInputStream与ByteArrayOutputStream封装字节数组,然后就可以通过流来使用数组中的数据了。

ByteArrayInputStream简单示例如下:

byte[] bytes = new byte[16];
bytes[0] = 't';
bytes[1] = 'e';
bytes[2] = 's';
bytes[3] = 't';
bytes[4] = '0';
InputStream inputStream = new ByteArrayInputStream(bytes);
int data = inputStream.read();
while (data != '0') {
    char ch = (char) data;
    System.out.println(ch);
    data = inputStream.read();
}

运行结果:

t
e
s
t

向字节数组中赋值字母,其实在字节数组中存储的是数字,那我们直接在数组中存储数字,转换后读出来的是不是就是字母呢?答案是肯定的。

// 新建字节数组
byte[] bytes = new byte[16];
// 数组中索引值0-3中,存储的是ASCII码,分别是116->'t',101->'e',115->'s'
bytes[0] = 116;
bytes[1] = 101;
bytes[2] = 115;
bytes[3] = 116;
// 此处简单的将0视为结束符,实际0在ASCII码中也是有其含义的
bytes[4] = 0;
InputStream inputStream = new ByteArrayInputStream(bytes);
int data = inputStream.read();
while (data != 0) {
    // 本地默认编码规则为UTF-8,兼容ASCII码
    char ch = (char) data;
    System.out.println(ch);
    data = inputStream.read();
}

运行结果与字节数组中存储字母的代码一致。

ByteArrayOutputStream简单示例如下:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// 将数据"test"以UTF-8的编码格式输出到输出流中
outputStream.write("test".getBytes(StandardCharsets.UTF_8));
// 将流中数据输出到字节数组中
byte[] bytes = outputStream.toByteArray();
for (byte b : bytes) {
    System.out.println((char) b);
}

运行结果:

t
e
s
t

CharArrayReader与CharArrayWriter

CharArrayReader与ByteArrayInputStream功能类似,只不过它是用来封装字符数组的。

CharArrayReader简单示例如下:

char[] chars = new char[16];
chars[0] = 't';
chars[1] = 'e';
chars[2] = 's';
chars[3] = 't';
chars[4] = '测';
chars[5] = '试';
chars[6] = '文';
chars[7] = '本';
chars[8] = '0';
CharArrayReader charArrayReader = new CharArrayReader(chars);
int data = charArrayReader.read();
while (data != '0') {
    char ch = (char) data;
    System.out.println(ch);
    data = charArrayReader.read();
}

运行结果:

t
e
s
t
测
试
文
本

CharArrayReader中的read()返回的是int类型。那我们直接在字符数组中存储数字,读出来转换后是不是也会是字符?答案依然是肯定的。

代码示例如下:

// 新建字符数组
char[] chars = new char[16];
// 数组中索引值0-3中,存储的是ASCII码(Unicode编码兼容),分别是116->'t',101->'e',115->'s'
chars[0] = 116;
chars[1] = 101;
chars[2] = 115;
chars[3] = 116;
// 数组中索引值4-7中,存储的是16进制的Unicode编码
// 分别是0x6d4b->'测',0x8bd5->'试',0x6587->'文',0x672c->'本'
chars[4] = 0x6d4b;
chars[5] = 0x8bd5;
chars[6] = 0x6587;
chars[7] = 0x672c;
// 此处简单的将0视为结束符
chars[8] = 0;
CharArrayReader charArrayReader = new CharArrayReader(chars);
int data = charArrayReader.read();
while (data != 0) {
    // 本地默认编码规则为UTF-8
    char ch = (char) data;
    System.out.println(ch);
    data = charArrayReader.read();
}

运行结果与字符数组中存储字符的结果一致。

要注意,程序的默认编码格式为UTF-8。关于Unicode与UTF-8的关系看此篇文章:Unicode与UTF-8

CharArrayWriter简单示例如下:

CharArrayWriter charArrayWriter = new CharArrayWriter();
// 将字符串输出到输出流中
charArrayWriter.write("test测试文本");
// 将流中数据输出到字符数组中
char[] chars = charArrayWriter.toCharArray();
for (char ch : chars) {
    System.out.println(ch);
}

运行结果:

t
e
s
t
测
试
文
本
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值