Java 输入/输出——处理流(DataInputStream/DataOutputStream、ByteArrayInputStream/ByteArrayOutputStream)
DataInputStream和DataOutputStream分别继承字节流InputStream和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputStream类型的节点流上。
DataInputStream和DataOutputStream提供了可以存取与机器无关的Java原始类型数据(如int,double等)的方法。
DataInputStream和DataOutputStream的构造方法:
- DataInputStream(InputStream in)
- DataOutputStream(OutputStream out)
ByteArrayInputStream和ByteArrayOutputStream的构造器和方法:
| Constructor | Description |
|---|---|
ByteArrayInputStream(byte[] buf) |
Creates a
ByteArrayInputStream so that it uses buf as its buffer array. |
ByteArrayInputStream(byte[] buf, int offset, int length) |
Creates
ByteArrayInputStream that uses buf as its buffer array. |
| Modifier and Type | Method | Description |
|---|---|---|
int |
available() |
Returns the number of remaining bytes that can be read (or skipped over) from this input stream.
|
void |
close() |
Closing a
ByteArrayInputStream has no effect. |
void |
mark(int readAheadLimit) |
Set the current marked position in the stream.
|
boolean |
markSupported() |
Tests if this
InputStream supports mark/reset. |
int |
read() |
Reads the next byte of data from this input stream.
|
int |
read(byte[] b, int off, int len) |
Reads up to
len bytes of data into an array of bytes from this input stream. |
void |
reset() |
Resets the buffer to the marked position.
|
long |
skip(long n) |
Skips
n bytes of input from this input stream. |
| Constructor | Description |
|---|---|
ByteArrayOutputStream() |
Creates a new byte array output stream.
|
ByteArrayOutputStream(int size) |
Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes.
|
| Modifier and Type | Method | Description |
|---|---|---|
void |
close() |
Closing a
ByteArrayOutputStream has no effect. |
void |
reset() |
Resets the
count field of this byte array output stream to zero, so that all currently accumulated output in the output stream is discarded. |
int |
size() |
Returns the current size of the buffer.
|
byte[] |
toByteArray() |
Creates a newly allocated byte array.
|
String |
toString() |
Converts the buffer's contents into a string decoding bytes using the platform's default character set.
|
String |
toString(int hibyte) |
Deprecated.
This method does not properly convert bytes into characters. As of JDK 1.1, the preferred way to do this is via the
toString(String enc) method, which takes an encoding-name argument, or the toString()method, which uses the platform's default character encoding. |
String |
toString(String charsetName) |
Converts the buffer's contents into a string by decoding the bytes using the named
charset. |
void |
write(byte[] b, int off, int len) |
Writes
len bytes from the specified byte array starting at offset off to this byte array output stream. |
void |
write(int b) |
Writes the specified byte to this byte array output stream.
|
void |
writeTo(OutputStream out) |
Writes the complete contents of this byte array output stream to the specified output stream argument, as if by calling the output stream's write method using
out.write(buf, 0, count). |
package com.zyjhandsome.io;
import java.io.*;
public class TestDataStream {
public static void main(String[] args) {
// TODO Auto-generated method stub
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try {
dos.writeDouble(Math.random());
dos.writeBoolean(true);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
// bais.available()方法返回其占用的字节数目,double(8-byte)+boolean(1-byte)=9-byte
System.out.println(bais.available());
DataInputStream dis = new DataInputStream(bais);
// 先存进去的是Double类型数据+Boolean类型的数据
// 因此在读取时,也应该给先读取Double类型数据+Boolean类型的数据
System.out.println(dis.readDouble());
System.out.println(dis.readBoolean());
dos.close();
dis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出结果:
9
0.03791491702144656
true
Java 输入/输出——处理流(DataInputStream/DataOutputStream、ByteArrayInputStream/ByteArrayOutputStream)的更多相关文章
- Java 输入/输出——处理流(BufferedStream、PrintStream、转换流、推回输入流)
关于使用处理流的优势,归纳起来就是两点:(1)对于开发人员来说,使用处理流进行输入/输出操作更简单:(2)使用处理流执行效率更高. 1.BufferedInputStream/BufferedOutp ...
- Java 输入/输出——处理流(RandomAccessFile)
RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据.与普通的输入/输出流不同的是,Ra ...
- Java 输入/输出——处理流(ObjectIO)
Object流:直接将Object流写入或读出. TestObjectIO.java transient关键字(英文名:透明的,可以用来修饰成员变量(实例变量),transient修饰的成员变量(实例 ...
- Java 输入/输出 反射
Java 输入/输出 反射 输入输出和反射 一.数据流的基本概念 流一般分为 ( Input Stream ) 和输出流 ( Output Stream ) 两类,但这种划分并不是绝对的.比如一 ...
- Java输入/输出教程
Java输入/输出(I/O)处理从源读取数据并将数据写入目标.通常,读取存储在文件中的数据或使用I/O将数据写入到文件中. java.io和java.nio包中包含处理输入/输出的Java类.java ...
- [linux] 输入&输出&错误流
输入&输出&错误流 Linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字分别是0,1,2. 标准 数字 含义 STDIN 0 标准输入,默认从键盘读 ...
- Java输入/输出(I/O)流的分类总结
java.io中有四个重要的抽象类: InputStream(字节输入流) Reader(字符输入流) OutputStream(字节输出流) Writer(字符输出流) 其中,InputStream ...
- JAVA输入/输出系统中的其他流学习笔记
一.字节数组流 字节数组流类能够操作内存中的字节数组,它的数据是一个字节数组.字节数组流类本身适配器设计模式,它把字节数组类型转为流类型使得程序能够对字节数组进行读写操作. 1.ByteArrayIn ...
- Java 输入/输出——字节流和字符流
1.流的分类 (1)输入流和输出流(划分输入/输出流时是从程序运行所在内存的角度来考虑的) 输入流:只能从中读取数据,而不能向其写入数据. 输出流:只能向其写入数据,而不能从中读取数据. 输入流主要由 ...
随机推荐
- Cubieboard A10 安装Nand系统,配置nginx,php,mysql,samba详细教程
安装前置条件 1.下载win32diskimager-v0.7-binary.zip 2.下载debian_wheezy_armhf_v1_mele.zip 3.下载cubie_nand_uboot_ ...
- MySql实现sequence功能的代码
使用函数创建自增序列管理表(批量使用自增表,设置初始值,自增幅度) 第一步:创建Sequence管理表 sequence DROP TABLE IF EXISTS sequence; CREATE T ...
- 腾讯云快速完成python3.6开发环境搭建与django应用部署
[本文出自天外归云的博客园] 部署python3.6.5 腾讯云服务器安装python3竟然要3个多小时!而且一度速度为0…… 于是网查据说是腾讯云服务器连python官网缓慢导致的,所以想找个国内的 ...
- AI金融知识自学偏量化方向-了解不同类型的机器学习2
有监督学习 vs 无监督学习 迭代和评估 偏差方差权衡 结合有监督学习和无监督学习(半监督学习)
- 网络协议TCP/IP、IPX/SPX、NETBEUI简介
网络中不同的工作站,服务器之间能传输数据,源于协议的存在.随着网络的发展,不同的开发商开发了不同的通信方式.为了使通信成功可靠,网络中的所有主机都必须使用同一语言,不能带有方言.因而必须开发严格的标准 ...
- Java知多少(22)方法重载
在Java中,同一个类中的多个方法可以有相同的名字,只要它们的参数列表不同就可以,这被称为方法重载(method overloading). 参数列表又叫参数签名,包括参数的类型.参数的个数和参数的顺 ...
- Java查找出现的单词
如何找到一个单词的每个出现? 解决方法 下面的例子演示了如何使用Pattern.compile()方法和m.group()方法找到一个词出现次数. import java.util.regex.Mat ...
- [Optimization] Greedy method
Given two sequences of letters A and B, find if B is a subsequence of A in thesense that one can del ...
- JS编程题
1.计算给定数组 arr 中所有元素的总和 (数组中的元素均为 Number 类型) function sum(arr) { var sum=0; for (var i=arr.length-1; i ...
- @Cacheable注解式缓存不起作用的情形
@Cacheable注解式缓存使用的要点:正确的注解式缓存配置,注解对象为spring管理的hean,调用者为另一个对象.有些情形下注解式缓存是不起作用的:同一个bean内部方法调用,子类调用父类中有 ...