DataInputStream

DataInputStream能以一种与机器无关(当前操作系统等)的方式,直接地从字节流读取Java基本数据类型和String类型的数据类型的数据,常用语网络传输(网络传输数据要求与平台无关)。

DataOutputStream写的文件,只能使用DataInputStream去读。并且去读的时候你需要提前知道写入的顺序,读写顺序一致才能正常取出数据

 

Constructor and Description

DataInputStream(InputStream

创建使用指定的底层InputStream的DataInputStream。

Modifier and Type

Method and Description

int

read(byte[] b)

从包含的输入流中读取一些字节数,并将它们存储到缓冲区数组 b

int

read(byte[] b, int off, int len)

从包含的输入流读取最多 len个字节的数据为字节数组。

boolean

readBoolean()

见的总承包 readBoolean的方法 DataInput

byte

readByte()

见的总承包 readByte的方法 DataInput

char

readChar()

readChar方法的总合同 DataInput

double

readDouble()

readDouble方法 DataInput的总体合同。

float

readFloat()

readFloatDataInput的一般合同。

void

readFully(byte[] b)

见的总承包 readFully的方法 DataInput

void

readFully(byte[] b, int off, int len)

见的总承包 readFully的方法 DataInput

int

readInt()

readInt方法 DataInput的一般合同。

long

readLong()

见的总承包 readLong的方法 DataInput

short

readShort()

readShort方法 DataInput的一般合同。

int

readUnsignedByte()

见的总承包 readUnsignedByte的方法 DataInput

int

readUnsignedShort()

readUnsignedShortDataInput的一般合同。

String

readUTF()

readUTFDataInput的一般合同。

static String

readUTF(DataInput

从流in读取以modified UTF-8格式编码的Unicode字符串的表示; 这个字符串然后作为String返回。

int

skipBytes(int n)

skipBytesDataInput的一般合同。

public class DataInputStreamTest01 {
    public static void main(String[] args) {
        DataInputStream dis = null;
        try {
            dis = new DataInputStream(new FileInputStream("..\\..\\java\\data"));
            /*读出来是乱码行不通
            byte[] bytes = new byte[1024];
            int readCount = 0;
            while ((readCount = dis.read(bytes)) != -1){
                System.out.println(new String(bytes,0,readCount));
            }
            */
            System.out.println(dis.readByte());
            System.out.println(dis.readShort());
            System.out.println(dis.readInt());
            System.out.println(dis.readLong());
            System.out.println(dis.readFloat());
            System.out.println(dis.readDouble());
            System.out.println(dis.readBoolean());
            System.out.println(dis.readChar());
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (dis != null){
                try {
                    dis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 


DataOutputStream

DataInputStream则可以直接将Java基本数据类型和String类型写入到其他字节输入流。

这个文件并不是普通文本文档(记事本打不开)

构造方法:

Modifier and Type

Field and Description

protected int

written

到目前为止写入数据输出流的字节数。

常用方法:

Modifier and Type

Method and Description

void

flush()

刷新此数据输出流。

int

size()

返回计数器的当前值 written ,到目前为止写入此数据输出流的字节数。

void

write(byte[] b, int off, int len)

写入 len从指定的字节数组起始于偏移 off基础输出流。

void

write(int b)

将指定的字节(参数 b的低8位)写入底层输出流。

void

writeBoolean(boolean v)

boolean写入底层输出流作为1字节值。

void

writeByte(int v)

byte作为1字节值写入底层输出流。

void

writeBytes(String

将字符串作为字节序列写入基础输出流。

void

writeChar(int v)

char写入底层输出流作为2字节值,高字节优先。

void

writeChars(String

将字符串写入底层输出流作为一系列字符。

void

writeDouble(double v)

双参数传递给转换 long使用 doubleToLongBits方法在类 Double ,然后写入该 long值基础输出流作为8字节的数量,高字节。

void

writeFloat(float v)

浮子参数的转换 int使用 floatToIntBits方法在类 Float ,然后写入该 int值基础输出流作为一个4字节的数量,高字节。

void

writeInt(int v)

将底层输出流写入 int作为四字节,高位字节。

void

writeLong(long v)

long写入底层输出流,为8字节,高字节为首。

void

writeShort(int v)

short写入底层输出流作为两个字节,高字节优先。

void

writeUTF(String

使用 modified UTF-8编码以机器无关的方式将字符串写入基础输出流。

 

public class DataOutputStreamTest01 {
    public static void main(String[] args) {
        //创建数据专属的字节输出流
        DataOutputStream dos = null;
        try {
            dos = new DataOutputStream(new FileOutputStream("..\\..\\java\\data"));

            //写
            byte b = 97;
            short s = 100;
            int i = 300;
            long l = 500;
            float f = 9.0F;
            double d = 3.14;
            boolean sex = false;
            char c = 'a';
            dos.writeByte(b);
            dos.writeShort(s);
            dos.writeInt(i);
            dos.writeLong(l);
            dos.writeFloat(f);
            dos.writeDouble(d);
            dos.writeBoolean(sex);
            dos.writeChar(c);
            //刷新
            dos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (dos != null){
                try {
                    dos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}