1. ByteArrayOutputStream
在实例化的时候会创建一个byte
类型的数组缓冲区,默认
32
个字节,可以无限增长。可以将内存中的对象读到该数组中。其中
write()
方法负责往数组中写数据。
实例化时的代码:
/**
* Creates a new byte array output stream. The buffer capacity is
* initially 32 bytes, though its size increases if necessary.
*/
public ByteArrayOutputStream() {
this(32);
}
/**
* Creates a new byte array output stream, with a buffer capacity of
* the specified size, in bytes.
*
* @param size the initial size.
* @exception IllegalArgumentException if size is negative.
*/
public ByteArrayOutputStream(int size) {
if (size < 0) {
throw new IllegalArgumentException("Negative initial size: "
+ size);
}
buf = new byte[size];
}
写入数据时的代码:
/**
* Writes the specified byte to this byte array output stream.
*
* @param b the byte to be written.
*/
public synchronized void write(int b) {
int newcount = count + 1;
if (newcount > buf.length) {
buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newcount));
}
buf[count] = (byte)b;
count = newcount;
}
/**
* Writes <code>len</code> bytes from the specified byte array
* starting at offset <code>off</code> to this byte array output stream.
*
* @param b the data.
* @param off the start offset in the data.
* @param len the number of bytes to write.
*/
public synchronized void write(byte b[], int off, int len) {
if ((off < 0) || (off > b.length) || (len < 0) ||
((off + len) > b.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return;
}
int newcount = count + len;
if (newcount > buf.length) {
buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newcount));
}
System.arraycopy(b, off, buf, count, len);
count = newcount;
}
2.ByteArrayInputStream
负责把字节数组中的字节以流的形式读出,实现了对同一个字节数组的操作,因此在实例化时需要传入一个byte类型的数据。
实例化代码:
/**
* Creates a <code>ByteArrayInputStream</code>
* so that it uses <code>buf</code> as its
* buffer array.
* The buffer array is not copied.
* The initial value of <code>pos</code>
* is <code>0</code> and the initial value
* of <code>count</code> is the length of
* <code>buf</code>.
*
* @param buf the input buffer.
*/
public ByteArrayInputStream(byte buf[]) {
this.buf = buf;
this.pos = 0;
this.count = buf.length;
}
/**
* Creates <code>ByteArrayInputStream</code>
* that uses <code>buf</code> as its
* buffer array. The initial value of <code>pos</code>
* is <code>offset</code> and the initial value
* of <code>count</code> is the minimum of <code>offset+length</code>
* and <code>buf.length</code>.
* The buffer array is not copied. The buffer's mark is
* set to the specified offset.
*
* @param buf the input buffer.
* @param offset the offset in the buffer of the first byte to read.
* @param length the maximum number of bytes to read from the buffer.
*/
public ByteArrayInputStream(byte buf[], int offset, int length) {
this.buf = buf;
this.pos = offset;
this.count = Math.min(offset + length, buf.length);
this.mark = offset;
}
一般情况下我们可以ByteArrayOutputStream和ByteArrayInputStream与ObjectInputStream/ObjectOutputStream或者DataInputStream/DataOutputStream结合使用,在读取对象或者数据类型数据时可以使用,例如以前在设计模式中讲过的原型模式中就有例子。
public User deepClone(){
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return (User)ois.readObject();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
分享到:
相关推荐
Java I/O 深入学习之输入和输出主要介绍了 Java I/O 深入学习之输入和输出,Java 类库中的 I/O 类分成输入和输出两部分,可以在 JDK 文档里的类层次结构中查看到。需要的朋友可以参考下前言编程语言的 I/O 类库中常...
本课程设计报告书——“Java课程设计报告书-学生版-1_I/O流与文件课程设计_”旨在帮助学生深入理解并掌握如何在Java中进行文件操作,通过实际的实验案例来学习文件对象和流类的应用。 一、Java I/O流概述 Java的I/O...
Java I/O流是Java编程语言中的一个重要组成部分,用于在程序和外部资源(如磁盘、网络、内存等)之间传输数据。本教程涵盖了从基础到高级的Java流知识...通过深入学习和实践,你将能够熟练地处理各种数据输入输出场景。
`Source` 和 `Sink` 分别代表了数据的读取和写入接口,它们抽象了不同类型的输入输出流,使得在不同类型的 I/O 源和接收端之间进行转换变得更加简单。 Okio 还引入了 `ByteString` 类,这是一个不可变的字节数组,...
在Java编程语言中,输入/输出流(Input/Output Stream,简称I/O流)是处理数据传输的基础。本文将深入探讨字符流的概念,包括它的作用、类型以及如何在实际编程中应用。首先,我们理解一下标题中的“字符流”:在...
总结来说,理解和掌握Java的I/O流可以帮助你有效地处理数据输入输出,线程管理则让你能够编写并发程序,特殊for语句简化了代码,而文件读写则是日常开发的基本技能。这些知识点的掌握程度直接影响到你在Java考试中的...
Java I/O 系统是Java程序进行输入输出操作的核心部分,它允许程序与外部世界交换数据。本章主要围绕Java I/O展开,包括了输入/输出流、标准IO、正则表达式与IO、新IO、压缩以及对象序列化等多个重要主题。 8.1 Java...
Java程序设计中,与系统输入/输出界面进行数据通信是通过输入输出流(I/O流)实现的。I/O流是Java的核心特性之一,允许程序读取数据源(如键盘、文件)并写入数据目标(如显示器、文件)。在Java 2中,这个过程尤其...
Java I/O主要包括字节流和字符流两大类,每类又分为输入流和输出流,进一步又可以分为节点流和处理流。节点流是直接作用于数据源或目标的,如FileInputStream和FileOutputStream;而处理流则建立在已存在的流之上,...
4. **文件输入输出流**:FileInputStream和FileOutputStream是最基本的文件读写流,用于读取和写入文件。示例可能会演示如何使用这两个类来实现简单的文件读写操作。 5. **字符流与转换流**:Reader和Writer用于...
Java程序设计中的输入流与输出流是Java I/O系统的核心组成部分,它们负责在程序与外部资源之间传输数据。本教程将深入讲解这些概念,并通过具体的类和方法来阐述其使用方式。 首先,输入流(InputStream)和输出流...
在这一版中,作者深入探讨了Java的输入输出机制,包括流式I/O、数据源、过滤流、压缩流以及JAR归档等内容。读者可以通过本书理解Java I/O体系结构,并学会如何在实际开发中应用这些知识。 ### Java I/O基础 Java I...
Java编程语言中的输入输出流(I/O流)是程序与外部设备交互的关键机制,包括从键盘、文件、网络等来源获取数据以及向显示器、打印机、文件等目标输出数据。本教程针对初级Java学者,旨在介绍Java I/O流的基础概念和...
这个小程序对理解Java的输入/输出(I/O)操作具有很好的学习价值。 首先,让我们深入了解一下Java中的I/O流。Java的I/O系统是基于流的,流可以理解为数据的双向通道,用于读取或写入数据。Java I/O库提供了许多类来...
5. **输入/输出与NIO**:讲解Java的I/O流体系,包括字节流、字符流、对象序列化,以及非阻塞I/O(New I/O,NIO)框架的使用。 6. **多线程编程**:介绍线程的创建、同步、协作,以及线程池的使用。 7. **反射与...
而处理控制台交互时,标准输入输出流就非常实用。 总的来说,Java的输入输出体系是一个强大的工具,允许程序员高效地处理各种数据传输任务。掌握流的概念和使用,不仅可以帮助初学者更好地理解和解决数学问题,还能...
例如,`java.util`包包含集合框架、日期和时间API,而`java.io`包则提供了输入/输出流相关的类。 3. **第12章:JAVA IO** Java I/O(输入/输出)系统是处理数据传输的关键部分。它包括字符流和字节流,以及缓冲、...
在深入学习Java的I/O系统时,你需要掌握如InputStream和OutputStream基础类,它们用于处理字节流;Reader和Writer类,用于处理字符流;以及更高级的类,如FileInputStream、FileOutputStream、FileReader和...