`

关于ByteArrayOutputStream(字节数组输出流)的一个例子,与ByteArrayInputStream作一比较

    博客分类:
  • Java
阅读更多
import java.io.*;

public class test {

/**

* ByteArrayOutputStream是一个把字节数组当作输出流的实现。我认为是所流当作数组来实现.它和ByteArrayInputStream不太一样。不能类比学习.

*

* java.lang.Object

继承者 java.io.OutputStream

继承者 java.io.ByteArrayOutputStream

所有已实现的接口:

Closeable, Flushable

public class ByteArrayOutputStream

extends OutputStream

此类实现了一个输出流,其中的数据被写入一个字节数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 检索数据。

关闭 ByteArrayOutputStream 无效。在关闭此流后且没有生成 IOException 时,可以调用此类中的该方法。

*

* 构造方法摘要

ByteArrayOutputStream()

    创建一个新的字节数组输出流。

ByteArrayOutputStream(int size)

    创建一个新的字节数组输出流,它具有指定大小的缓冲区容量(以字节为单位)。

* 字段摘要

protected  byte[]     buf

    存储数据的缓冲区。

protected  int     count

    缓冲区中的有效字节数。

*/

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

ByteArrayOutputStream f = new ByteArrayOutputStream();

//String s = "This should end up in the array 汉字";

StringBuffer s = new StringBuffer("This should end up in the array 汉字");

s.append(" 我是append进来的 ");

byte buf[] = s.toString().getBytes();

f.write(buf);

/**

* write

public void write(byte[] b,

         int off,

         int len)

将指定字节数组中从偏移量 off 开始的 len 个字节写入此字节数组输出流。

*/

System.out.println("Buffer as a string");

System.out.println(f.toString());

/**

toString

public String toString()

将缓冲区的内容转换为字符串,根据平台的默认字符编码将字节转换成字符。

*/

System.out.println("Into array");

byte b[] = f.toByteArray();

/**

* toByteArray

public byte[] toByteArray()

创建一个新分配的字节数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中。

*/

for (int i = 0; i < b.length; i++) {

System.out.print((char) b[i]);

}

System.out.println(" To an OutputStream()");

OutputStream f2 = new FileOutputStream("fiel");

f.writeTo(f2);

/**

* writeTo

public void writeTo(OutputStream out)

    throws IOException

将此字节数组输出流的全部内容写入到指定的输出流参数中,这与使用 out.write(buf, 0, count) 调用该输出流的 write 方法效果一样。

*/

f2.close();

System.out.println("Doing a reset");

f.reset();

/**

* reset

public void reset()

将此字节数组输出流的 count 字段重置为零,从而丢弃输出流中目前已累积的所有输出。通过重新使用已分配的缓冲区空间,可以再次使用该输出流。

*/

for (int i = 0; i < 10; i++) {

f.write('X');

}

System.out.println(f.toString());

}

}



import java.io.*;

public class test2 {

/**

* @param args

*/

public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

String tmp = "hello";

byte b[] = tmp.getBytes();

ByteArrayInputStream in = new ByteArrayInputStream(b);

for (int i = 0; i < 2; i++) {

int c;

while ((c = in.read()) != -1) {

if (i == 0) {

System.out.print((char) c);

} else {

System.out.print(Character.toUpperCase((char) c));

}

}

in.reset();//reset()方法两次读取同样的输入的方法:先从流中读取每个字符,并以小写字母形式打印,然后重轩设置流并比头读起,并在打印之前先将小写转换成大写字母。

}

}

}

文章转载自:http://blog.csdn.net/qq7187057/archive/2007/07/20/1700309.aspx


分享到:
评论

相关推荐

    将输出流OutputStream转化为输入流InputStream的方法

    `ByteArrayOutputStream`允许我们将数据写入一个字节数组,而`ByteArrayInputStream`可以从该字节数组中读取数据。 以下是一个简单的代码示例,展示如何将`OutputStream`转换为`InputStream`: ```java import ...

    JAVA_内存流

    通过实际编写代码例子,你可以更好地掌握这些类的用法,例如创建一个简单的程序,将一个字节数组写入 ByteArrayOutputStream,然后从 ByteArrayInputStream 读取并验证数据的正确性。这样的练习有助于巩固理论知识,...

    java输入输出流详解.doc

    这段代码首先创建了一个字节数组`buffer`作为缓冲区,然后调用`System.in.read(buffer)`读取键盘输入。`read()`方法会将读取的数据存入缓冲区,并返回实际读取的字节数。之后,通过两次循环,分别以整数形式和字符...

    Java 的 IO流笔记.md

    - **ByteArrayInputStream/ByteArrayOutputStream**:节点流,用于以字节为单位直接操作字节数组。 - **ObjectInputStream/ObjectOutputStream**:处理流,用于以字节为单位直接操作对象。 - **DataInputStream/...

    java jsp IO包 教程 新手入门

    - **ByteArrayInputStream**: 将内存中的字节数组作为输入流。 - **ByteArrayOutputStream**: 在内存中创建字节数组。 - **FileInputStream**: 从文件中读取字节。 - **FileOutputStream**: 向文件写入字节。 - **...

    教你彻底明白Java的IO系统

    - **ByteArrayInputStream**:将内存中的一个字节数组作为输入流来使用。适用于内存中的数据读取。 - **StringBufferInputStream**:将一个字符串作为输入流。主要用于字符串数据的读取。 - **FileInputStream**:将...

    JAVA程序员培训定制课程c14PPT教案学习.pptx

    文件复制是节点流应用的一个常见例子。`FileReader`和`FileWriter`分别是字符流的节点流,用于读取和写入文件。通过循环读取`FileReader`并写入`FileWriter`,可以实现文件内容的复制。 7. **节点流的种类**: ...

    Java二进制IO类与文件复制操作实例

    同样,字节输出流(OutputStream)的基类是`java.io.OutputStream`,子类有`FileOutputStream`(向文件写入字节)和`ByteArrayOutputStream`(向字节数组写入字节)。 3. **缓冲流(Buffered Streams)** 为了提高...

    ODI SQL Server到Oracle数据库的照片集成.doc

    6. 字节流处理:当处理非空 Blob 数据时,需要将数据读入缓冲区,然后通过 `ByteArrayOutputStream` 创建一个新的输出流,从而获取输出流的长度,这在调用 `setBinaryStream()` 方法时作为参数使用。 7. Jython ...

    Java_IO流详解

    在这个例子中,我们首先创建了一个`FileInputStream`对象,然后通过`read()`方法逐字节读取文件内容,直到文件结束。最后,关闭输入流以释放资源。 #### 五、面试例题解析 面试例题29询问的是如何创建文件“file....

    【IT十八掌徐培成】Java基础第16天-03.串行化-深度复制.zip

    在这个例子中,我们首先将对象序列化到字节数组,然后再从字节数组反序列化得到新的对象,这样就实现了深复制。需要注意的是,这种方法只适用于实现`Serializable`接口的类,且在反序列化时,需要处理可能抛出的`...

    JAVA 复习资料

    - `ByteArrayInputStream`和`ByteArrayOutputStream`用于在内存中读写字节数组。 - 内存流非常适合处理那些不需要持久化的临时数据。 4. **高级I/O操作** - `PrintStream`可以将各种类型的数据打印到指定的输出...

    springboot 解决InputStream只能读取一次的问题

    然后,我们创建了一个`CachedServletInputStream`类,它实现了`ServletInputStream`接口,并从缓存的字节数组中读取数据。 在处理请求时,我们可以先创建一个`RepeatableHttpServletRequest`实例,将其传递给我们的...

    Android中文件读写(输入流和输出流)操作小结

    在这个例子中,我们创建了一个`ByteArrayOutputStream`作为数据存储,通过循环读取`InputStream`中的数据,并将其写入`outputStream`,最后关闭流并返回字节数组。 了解这些基础知识后,开发者可以在Android应用中...

    浅谈JAVA 内存流的实现

    在这个例子中,我们创建了一个ByteArrayInputStream来读取原始的大写字符串的字节数组,然后通过循环读取并转换为小写,再写入到ByteArrayOutputStream中。最后,将输出流的内容转换为字符串并打印出来,得到的结果...

    JAVA的基础培训知识点

    - 字节数组流:ByteArrayInputStream, ByteArrayOutputStream。 - 字符数组流:CharArrayReader, CharArrayWriter。 - 字符串流:StringBufferInputStream, StringReader, StringWriter。 - 网络流:InputStream...

    深入分析javaIO的工作机制.doc

    `InputStream`的子类众多,如`FileInputStream`用于从文件系统中的文件中获得输入字节流,`ByteArrayInputStream`则用于从字节数组中获得输入流等。下面展示的是`InputStream`类的继承结构示意图: ``` [图1] ...

    2021-2022计算机二级等级考试试题及答案No.15909.docx

    22. E-R图转换:一个实体型通常转换为一个关系模式,一对一和一对多的联系可以与实体合并,多对多联系需要转换为一个独立的关系模式。 23. Web服务器控件:Input和AdRotator是Web服务器控件的例子,分别用于输入和...

    java的深度克隆的例子

    深度克隆,也称为完全克隆,是指创建一个与原对象相同的新对象,不仅复制原对象的所有属性,还复制了原对象中引用的对象。这通常用于创建一个独立于原对象的新实例,即使原对象发生改变,新对象也不会受到影响。下面...

    java List 深度复制方法

    这个例子中,我们首先将原始List序列化为字节数组,然后反序列化为新的List。这样,新旧两个List中的对象是独立的,修改其中一个不会影响另一个。 当然,对于非序列化友好的类,我们可以选择手动复制每个元素。例如...

Global site tag (gtag.js) - Google Analytics