Các lớp DataInputStream và DataOutputStream cung cấp các phương thức cho việc đọc và ghi các kiểu dữ liệu cơ bản của Java và các xâu dưới dạng nhị phân. Các định dạng nhị phân được sử dụng cho các mục đích trao đổi dữ liệu giữa các chương trình Java khác nhau thông qua một kết nối mạng, một file dữ liệu, một đường ống (pipe line) hoặc các môi trường trung gian khác
Lớp DataOutputStream cung cấp 11 phương thức để ghi các kiểu dữ liệu cụ thể của Java:
• public final void writeBoolean(boolean b) throws IOException
• public final void writeByte(int b) throws IOException
• public final void writeShort(int s) throws IOException
• public final void writeChar(int c) throws IOException
• public final void writeInt(int i) throws IOException
• public final void writeLong(long l) throws IOException
• public final void writeFloat(float f) throws IOException
• public final void writeDouble(double d) throws IOException
• public final void writeChars(String s) throws IOException
• public final void writeBytes(String s) throws IOException
Tất cả các dữ liệu được viết dưới dạng big-endian. Các số nguyên được viết dưới dạng bù hai với số lượng byte ít nhất. Do đó, một số nguyên khai báo kiểu byte
được viết như là 1 byte, khai báo kiểu short sẽ được biểu diễn bằng 2 byte, khai báo kiểu int sẽ được biểu diễn bằng 4 byte, khai báo kiểu long sẽ được biểu diễn bằng 8 byte. Các số thực khai báo kiểu float và double sẽ được viết dưới dạng IEEE 754 và được biểu diễn lần lượt là 4 và 8 byte. Các dữ liệu kiểu boolean sẽ được biểu diễn bằng 1 bit với giá trị 0 cho false và 1 cho true. Các ký tự được viết dưới dạng 2 byte không dấu.
Cùng với các phương thức để viết các số nhị phân và các xâu,
DataOutputStream vẫn có các phương thức thông thường như write(), flush(), và close() như bất kỳ lớp output stream nào.
DataInputStream là lớp bổ sung cho lớp DataOutputStream.
DataInputStream có thể đọc tất cả các định dạng mà lớp DataOutputStream ghi. Thêm vào đó, lớp DataInputStream cũng có các phương thức thông thường như
read(), available(), skip() và close() cũng như các phương thức để đọc toàn bộ các mảng các byte và các dòng của văn bản.
Có 9 phương thức để đọc đọc dữ liệu nhị phân tương thích với 11 phương thức trong DataOutputStream:
• public final boolean readBoolean() throws IOException
• public final byte readByte() throws IOException
• public final char readChar() throws IOException
• public final short readShort() throws IOException
• public final int readInt() throws IOException
• public final long readLong() throws IOException
• public final float readFloat() throws IOException
• public final double readDouble() throws IOException
• public final String readUTF() throws IOException
Lớp DataInputStream cung cấp hai phương thức để đọc các byte không dấu và các số nguyên khai báo kiểu short không dấu và trả về số nguyên tương ứng. Mặc dù Java không có hai kiểu dữ liệu là byte không dấu và số nguyên kiểu short không dấu nhưng người lập trình trong Java có thể gặp các kiểu dữ liệu này khi đọc dữ liệu nhị phân viết bằng ngôn ngữ C. Hai phương thức là:
• public final int readUnsignedByte() throws IOException
Lớp DataInputStream có hai phương thức thông thường để đọc dữ liệu vào môt mảng hoặc một mảng con và trả về số byte đã đọc. Lớp DataInputStream cũng có hai phương thức readFully(), hai phương thức này sẽ lặp lại việc đọc dữ liệu vào môt mảng từ input stream lớp dưới cho đến khi đã đọc đủ số byte đã yêu cầu. Nếu không đọc được đủ dữ liệu một IOException sẽ được đưa ra. Các phương thức là:
• public final int read(byte[] input) throws IOException
• public final int read(byte[] input, int offset, int length) throws IOException
• public final void readFully(byte[] input) throws IOException
• public final void readFully(byte[] input, int offset, int length) throws IOException
DataInputStream cung cấp phương thức phổ biến readLine() để đọc một dòng trong văn bản và trả lại một dòng:
• public final String readLine() throws IOException
Tuy nhiên ta không nên sử dụng phương thức này vì phương thức này bị phản đối và có thể gây ra lỗi trong quá trình đọc.