浅谈JAVA 内存流的实现

作者:huan欢 时间:2021-06-28 05:43:59 

掌握内存操作流

输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream

ByteArrayInputStream:将内容写入到内存中,

ByteArrayOutputStream:将内存中数据输出

此时的操作应该以内存为操作点。

浅谈JAVA 内存流的实现

利用此类 完成一些功能。

常用方法

浅谈JAVA 内存流的实现

ByteArrayInputStream :是InputStream子类。


public class ByteArrayInputStream extends InputStream

构造方法:


ByteArrayInputStream(byte[] buf)
    //创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。

接收一个byte数组,实际上内存的输入就是在构造方法上将数据传递到内存之中。

ByteArrayOutputStream:是OutputStream子类

输出就是从内存中写出数据。


public class ByteArrayOutputStream extends OutputStream

构造方法:


ByteArrayOutputStream()
    创建一个新的 byte 数组输出流。

主要方法:


void write(int b)
    将指定的字节写入此 byte 数组输出流。

利用他们,完成一个大小写字母转换顺序的程序。

重温一下这个方法:getBytes();定义如下:返回的是一个byte类型的数组。


 public byte[] getBytes() {
   return StringCoding.encode(value, 0, value.length);
 }

1,


int size()
    返回缓冲区的当前大小

2,


byte[] toByteArray()
    创建一个新分配的 byte 数组。

3,


String toString()
    使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串。

利用他们,完成一个大小写字母转换顺序的程序。

String类的大小写转换方法:


String toLowerCase()
    使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

转大写:


String toUpperCase()
    使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

如果要想把一个大写边小写,则可以通过包装类,字符的包装类是Character。


static char toLowerCase(char ch)
    使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为小写。

代码实例:

注意,跟文件读取不一样,不要设置文件路径。


package 类集;
import java.io.* ;
public class ByteArrayDemo01{
 public static void main(String args[]){
   String str = "HELLOWORLD" ;    // 定义一个字符串,全部由大写字母组成
   ByteArrayInputStream bis = null ;  // 内存输入流
   ByteArrayOutputStream bos = null ;  // 内存输出流
   bis = new ByteArrayInputStream(str.getBytes()) ;  // 向内存中输出内容,注意,没有跟文件读取一样,设置文件路径。
   bos = new ByteArrayOutputStream() ;  // 准备从内存ByteArrayInputStream中读取内容,注意,跟文件读取不一样,不要设置文件路径。
int temp = 0 ;  while((temp=bis.read())!=-1) { char c = (char) temp ; // 读取的数字变为字符   bos.write(Character.toLowerCase(c)) ; // 将字符变为小写  } // 所有的数据就全部都在ByteArrayOutputStream中  String newStr = bos.toString() ; // 因为所有output的数据都在ByteArrayOutputStream实例对象中,所以可以取出内容,将缓冲区内容转换为字符串。
try{ bis.close() ; bos.close() ;  }catch(IOException e){ e.printStackTrace() ; } System.out.println(newStr) ; } };

实际上以上操作很好体现了对象的多态。通过实例化其子类不同,完成的功能也不同,也就相当于输出的位置不同,

如果是输出文件,则使用FileXxxx类。如果是内存,则使用ByteArrayXxx。

来源:https://www.cnblogs.com/huan-guo/p/8524635.html

标签:JAVA,内存流
0
投稿

猜你喜欢

  • java中断线程的正确姿势完整示例

    2023-01-27 06:33:58
  • C#连接ODBC数据源的方法

    2023-04-20 07:30:33
  • 浅谈Java中ArrayList线程不安全怎么办

    2023-10-02 19:24:56
  • 归并排序的原理及java代码实现

    2021-11-18 13:51:10
  • java将一个目录下的所有文件复制n次

    2023-03-04 00:13:12
  • myBatis实现三 级嵌套复杂对象的赋值问题

    2023-11-23 06:42:26
  • Spring Boot实现配置文件的自动加载和刷新功能

    2023-07-14 02:26:55
  • Java 如何实现一个http服务器

    2022-03-27 05:40:04
  • Java Runtime的使用详解

    2021-10-23 06:46:39
  • java中String字符串删除空格的七种方式

    2023-03-11 05:54:24
  • 盘点MQ中的异常测试

    2022-05-06 07:39:24
  • 使用flutter创建可移动的stack小部件功能

    2023-06-21 12:28:25
  • Java实现图片验证码功能

    2021-12-07 12:58:55
  • SpringBoot Security安装配置及Thymeleaf整合

    2023-11-27 16:18:41
  • Dubbo retries 超时重试机制的问题原因分析及解决方案

    2023-11-29 08:22:38
  • 你所不知道的Spring自动注入详解

    2021-09-04 19:30:08
  • java泛型常用通配符实例解析

    2022-09-16 22:14:50
  • java数据结构-堆实现优先队列

    2023-11-25 08:30:20
  • Java中实现在一个方法中调用另一个方法

    2022-05-15 10:02:11
  • 详解Kotlin:forEach也能break和continue

    2022-05-03 01:24:10
  • asp之家 软件编程 m.aspxhome.com