学习-Java输入输出之数组IO流之将给定整数转换为字符串

news/2024/7/7 18:54:45

任务描述

本关任务:将给定整数通过 ByteArrayOutputStream 转换为字符串,并输出结果。

相关知识

字节数组流

字节数组流是和内存中的数组相关的一个流,它可以将字节数组写到输出流中,也可以将字节数组从输入流中读出来,所有过程不涉及磁盘读写。 #####字节数组输入流(ByteArrayInputStream)

ByteArrayInputStream 是 InputStream 的子类,该流可以把一个字节数组在内存中变成一个输入流,也就是说,它把一个字节数组 byte[] 包装了一下,使其具有流的属性,可顺序读下去。

字节数组输入流构造方法

下表是它的构造方法:

构造方法说明
ByteArrayInputStream(byte[] buf)通过一个字节数组创建一个字节数组输入流对象
ByteArrayInputStream(byte[] buf, int offset, int length)通过一个字节数组的部分数据创建一个字节数组输入流对象,offset:数组偏移量,length:读取长度

构造方法使用示例:

  1. public static void main(String[] args) throws IOException {
  2. // 创建字节数组
  3. byte[] bytes = {96,97,98,99};
  4. // 通过字节数组创建ByteArrayInputStream对象
  5. ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
  6. // 通过字节数组的部分数据创建ByteArrayInputStream对象
  7. ByteArrayInputStream byteArrayInputStream1 = new ByteArrayInputStream(bytes, 0, 3);
  8. }

字节数组输入流常用方法

下表是它的常用方法:

方法名方法说明
read()从输入流中读取下一个数据字节
read(byte b[], int off, int len)将最多 len 个数据字节从此输入流读入字节数组。off:数组中的起始偏移量,len:写入的字节数
skip(long n)从输入流中跳过 n 个输入字节
available()返回剩余可读取的字节数

read() 方法使用示例:

  1. public static void main(String[] args) throws IOException {
  2. // 创建字节数组
  3. byte[] bytes = {96,97,98,99};
  4. // 读取字节数组数据
  5. try(
  6. ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);) {
  7. int read;
  8. while((read=byteArrayInputStream.read())!=-1){
  9. System.out.println(read);
  10. }
  11. }

执行结果:

  1. 96
  2. 97
  3. 98
  4. 99

从以上代码中可以看到,ByteArrayInputStream 是从字节数组中读取数据,这是它的主要特征。 #####字节数组输出流(ByteArrayOutputStream)

ByteArrayOutputStream 是 OutputStream 的子类,该流用于创建字节数组输出流,同时内存会为该输出流创建一个默认大小的字节数组,用于存储写入的字节内容。

字节数组输入流构造方法

下表是它的构造方法:

构造方法说明
ByteArrayOutputStream()创建一个 32 字节(默认大小)的缓冲区
ByteArrayOutputStream(int size)创建一个大小为 size 字节的缓冲区

构造方法使用示例:

  1. public static void main(String[] args) throws IOException {
  2. // 创建一个有默认大小字节的缓冲区的ByteArrayOutputStream对象
  3. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
  4. // 创建一个有64字节的缓冲区的ByteArrayOutputStream对象
  5. ByteArrayOutputStream byteArrayOutputStream1 = new ByteArrayOutputStream(64);
  6. }

字节数组输出流常用方法

方法说明
reset()重置流,使流计数=0
toByteArray()创建一个新分配的字节数组。数组的大小和当前输出流的大小,内容是当前输出流的拷贝
toString()将缓冲区的内容转换为字符串,根据平台的默认字符编码将字节转换成字符
write(int w)将指定的字节写入此字节数组输出流
write(byte []b, int off, int len)将指定字节数组中从偏移量 off 开始的 len 个字节写入此字节数组输出流
writeTo(OutputStream outSt)将此字节数组输出流的全部内容写入到指定的输出流参数中

常用方法使用示例:

  1. public static void main(String[] args) throws IOException {
  2. try (
  3. // 创建ByteArrayOutputStream对象
  4. ByteArrayOutputStream bOutput = new ByteArrayOutputStream();) {
  5. // 向缓冲区写入数据
  6. for (int i = 97; i < 100; i++) {
  7. bOutput.write(i);
  8. }
  9. // 从流中取出数据
  10. byte b[] = bOutput.toByteArray();
  11. // 将数据转换为字符串
  12. System.out.print(new String(b));
  13. }
  14. }

执行结果:

  1. abc

从以上代码中可以看到,我们从 ByteArrayOutputStream 流中取出数据用的是 toByteArray 方法。

import java.io.*;
import java.util.Scanner;

public class FileTest {

    public static void main(String[] args) throws IOException {
        // 请在此编写代码
        /********** Begin **********/
        try (
                // 创建ByteArrayOutputStream对象
                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                ) {
            // 获取给定数据并写入ByteArrayOutputStream流中
            Scanner input = new Scanner(System.in);
            while (!input.hasNext("%")){
                byteArrayOutputStream.write(Integer.parseInt(input.next()));
            }
            // 从流中取出数据
            byte[] bytes = byteArrayOutputStream.toByteArray();
            // 将数据转换为字符串,并输出结果
            System.out.println(new String(bytes));
        }
        /********** End **********/
    }
}

 


http://lihuaxi.xjx100.cn/news/295503.html

相关文章

ZMQ请求应答模式之无中间件的可靠性--自由者模式

一、引言 我们讲了那么多关于中间件的示例&#xff0c;好像有些违背“ZMQ是无中间件”的说法。但要知道在现实生活中&#xff0c;中间件一直是让人又爱又恨的东西。实践中的很多消息架构能都在使用中间件进行分布式架构的搭建&#xff0c;所以说最终的决定还是需要你自己去权衡…

Java面试问题记录

1.mybatis中#{}和${}的区别&#xff1f; 2.mybatis当中收参的方式Param 对象的属性和Map集合键值对 3.SpringMVC中RestController和Controller&#xff0c;RequestBody和ResponseBody两个注解的区别。 4.get和post方式请求&#xff0c;乱码的解决方案。 5.什么是跨域请求&#…

JavaScript -- 05. 对象介绍

文章目录对象1 对象介绍1.1 数据类型比较1.2 定义对象2 属性2.1 属性名2.2 属性值2.3 in运算符3 对象字面量4 枚举类型4.1 for - in语句5 可变类型5.1 回顾不可变类型5.2 对象的存储方式5.3 对象的比较5.4 指向相同对象5.5 修改对象和修改变量对象 这部分对JS中的对象&#xff…

Dynamsoft Barcode Reader SDK 9.6.0 Crack

Dynamsoft 条码阅读器 9.6.0 添加对处理条形码图像方向的支持。2022 年 11 月 30 日 - 16:06 新版本特征 C、C、.NET、Java 和 Python SDK 添加了对处理图像方向的支持。使用此新功能&#xff0c;您可以&#xff1a; 获取“TranformationMatrix”以及条形码位置结果。使用Trans…

每日一题·对原型和原型链的理解(12/1)

目录 1. 原型链为什么要出现&#xff1f; 2. 原型是什么 3. 原型链是什么 4. 一些代码片段 1. 原型链为什么要出现&#xff1f; 声明2个实例&#xff0c;每个实例都会独立创建sayHi方法&#xff0c;非常占用内存。一样的方法&#xff0c;可以放在原型对象上共用。 function…

6、流程控制(重点)

文章目录6、流程控制&#xff08;重点&#xff09;6.1 if 判断6.2 case 语句6.3 for 循环6.4 while 循环尚硅谷2022版Linux扩展篇Shell教程-讲师&#xff1a;武晟然 壁立千仞 无欲则刚 6、流程控制&#xff08;重点&#xff09; 6.1 if 判断 1&#xff09;基本语法 &#xff…

Spring MVC中@Controller和@RequestMapping注解详解

在《第一个Spring MVC应用》教程中创建了两个传统风格的控制器&#xff0c;它们是实现 Controller 接口的类。传统风格的控制器不仅需要在配置文件中部署映射&#xff0c;而且只能编写一个处理方法&#xff0c;不够灵活。使用基于注解的控制器具有以下两个优点&#xff1a; 在…

基于SSM的邮箱客户端的设计与实现

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 选题及意义 1 1.2 邮箱发展现状 1 1.2.1开源邮件系统 2 1.2.2国外商业邮件系统 2 1.2.3国内商业邮件系统 2 1.3研究内容 4 第2章 相关技术的理论概述 5 2.1 JSPServlet技术优势 5 2.2Mysql数据库的介绍 6 2.3 tomcat服务器介绍 6 2…