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  ByteArrayInputStreamso that it usesbufas its buffer array. | 
| ByteArrayInputStream(byte[] buf, int offset, int length) | Creates  ByteArrayInputStreamthat usesbufas 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  ByteArrayInputStreamhas no effect. | 
| void | mark(int readAheadLimit) | Set the current marked position in the stream. | 
| boolean | markSupported() | Tests if this  InputStreamsupports 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  lenbytes 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  nbytes 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  ByteArrayOutputStreamhas no effect. | 
| void | reset() | Resets the  countfield 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 thetoString()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  lenbytes from the specified byte array starting at offsetoffto 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)输入流和输出流(划分输入/输出流时是从程序运行所在内存的角度来考虑的) 输入流:只能从中读取数据,而不能向其写入数据. 输出流:只能向其写入数据,而不能从中读取数据. 输入流主要由 ... 
随机推荐
- 掌握Docker命令-Docker for Web Developers(4)
			1.管理镜像命令 获取镜像 docker push ubuntu:14:04 查看镜像列表 docker images 重命名image docker tag IMAGE-NAME NEW-IMAGE ... 
- Android adb input 命令介绍
			input命令是用来向设备发送模拟操作的命令: 因为版本不同,input命令也有所不同 以下为Android 4.0的input命令: usage:input text <string> ... 
- Java和Scala语法比较
			类型推断 挑逗指数: 四星 我们知道,Scala一向以强大的类型推断闻名于世.很多时候,我们无须关心Scala类型推断系统的存在,因为很多时候它推断的结果跟直觉是一致的. Java在2016 年也新增 ... 
- MySQL中文参考手册
			1 MySQL 的一般信息 这是MySQL参考手册:它记载了MySQL版本3.23.7-alpha. MySQL 是一个快速.多线程.多用户和强壮的SQL数据库服务器. 对Unix和 OS/2 平台, ... 
- LeetCode_832. Flipping an Image_Solution
			原题链接 原题中文链接 一.题目描述 二.解题思路 题目所描述的意思是对每个数组先进行取反,并且对数组中的每个元素进行取反转换,所以一共要执行两个操作. 使用reverse函数解决水平翻转的操作: 由 ... 
- Python_序列与映射的解包操作
			解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ... 
- Oracle Enterprise Linux 6.4 下配置vncserver
			① 安装vncserveryum install tigervnc-server ② 配置/etc/sysconfig/vncservers 配置参数 # VNCSERVERS="2 ... 
- 爱快路由计费系统easyradius隆重发布,支持V2版本,欢迎大家测试使用
			随着PA.BV接口的发布的临近,我们已经对ROS及爱快V2接口进行大量的升级工作 经用户测试,各方便已满足用户需求. 其实很早以前我们就有支持爱快路由的打算,但是由于各方便原因,通讯接口做好了,但是并 ... 
- bootstrap-select 多选下拉框使用教程
			http://silviomoreto.github.io/bootstrap-select/ 一.使用bootstrap-select组件时,先引用下列文件 最后一个文件 defaults-zh_C ... 
- linux  环境变量字符串的优先顺序
			/data/miniconda3dir/envs/mtfy/bin:$PATH 和$PATH:/data/miniconda3dir/envs/mtfy/bin 区别是非常大. 在linux中不同环境 ... 
