BÀI TẬP CHƯƠNG 2 1 Các lớp InputStream và OutputStream trong Java được khai báo như thế nào ? Liệt kê các phương thức cơ bản của lớp này? *) Các dòng vào (input stream) Lớp input cơ bản của Java là ja[.]
BÀI TẬP CHƯƠNG Các lớp InputStream OutputStream Java khai báo ? Liệt kê phương thức lớp này? *) Các dòng vào (input stream) Lớp input Java java.io.InputStream, với khai báo sau: public abstract class InputStream{ } Lớp cung cấp phương thức để đọc liệu byte chưa xử lý cịn gọi byte thơ: public abstract int read() throws IOException public int read(byte[] input) throws IOException public int read(byte[] input, int offset, int length) throws IOException public long skip(long n) throws IOException public int available() throws IOException public void close() throws IOException *) Các dòng (output stream) Lớp output Java java.io.OutputStream, với khai báo sau: public abstract class OutputStream{ } Lớp cung cấp phương thức để ghi liệu, là: public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException public void write(byte[] data, int offset, int length) throws IOException public void flush() throws IOException public void close() throws IOException Trình bày hiểu biết anh (chị) lớp BufferedInputStream, BufferedOutputStream? - Lớp BufferedOutputStream lưu trữ liệu ghi vùng đệm (một mảng byte bảo vệ có tên buf) vùng đệm đầy dòng đẩy Sau lớp ghi lần tất liệu vào output stream lớp Với số byte cần ghi lên kết nối mạng, việc ghi lần nhiều byte nhanh nhiều việc ghi lần byte TCP segment hay gói UDP phải mang thêm phần overhead đến 40 byte - Lớp BufferedInputStream có mảng byte bảo vệ có tên buf, mảng phục vụ vùng đệm Mỗi phương thức read() dòng gọi, phương thức cố gắng để tìm đọc liệu yêu cầu từ vùng đệm Chỉ vùng đệm khơng cịn liệu dịng đọc liệu từ nguồn lớp Khi dịng đọc nhiều liệu từ nguồn lớp vào vùng đệm, cho dù dịng cần hay khơng cần liệu tức Các liệu khơng sử dụng tức sử dụng cho lần gọi phương thức read() sau Trình bày cấu tạo lớp PrintStream? Lớp PrintStream filter output stream mà hầu hết lập trình viên gặp System.out PrintStream Tuy nhiên nhiều output stream khác gắn vào print stream, sử dụng constructor: public PrintStream(OutputStream out) public PrintStream(OutputStream out, boolean autoFlush) Các lớp DataInputStream DataOutputStream có đặc điểm cần ý? Các lớp DataInputStream DataOutputStream cung cấp phương thức cho việc đọc ghi kiểu liệu Java xâu dạng nhị phân Các định dạng nhị phân sử dụng cho mục đích trao đổi liệu chương trình Java khác thơng qua kết nối mạng, file liệu, đường ống (pipe line) mơi trường trung gian khác Trình bày cấu tạo lớp Reader, Writer lớp dẫn xuất nó? *)Lớpp Writer Lớp Writer tương ứng với lớp java.io.OutputStream Lớp Writer abstract có hai protected constructor Cũng giống OutputStream, lớp Writer không sử dụng trực tiếp, thay vào lớp sử dụng theo kiểu polymorphic thông qua số lớp Lớp Writer có năm phương thức write() phương thức flush(), close(): protected Writer() protected Writer(Object lock) public abstract void write(char[] text, int offset, int length) throws IOException public void write(int c) throws IOException public void write(char[] text) throws IOException public void write(String s) throws IOException public void write(String s, int offset, int length) throws IOException public abstract void flush() throws IOException public abstract void close() throws IOException Phương thức write(char[] text, int offset, int length) phương thức bốn phương thức write() lại triển khai Một lớp cần phải override phương thức override phương thức flush() close() *) Lớpp Reader Lớp Reader tương ứng với lớp java.io.InputStream Lớp Reader abstract có hai protected constructor Giống InputStream Writer, lớp Reader không dùng trực tiếp sử dụng thông qua số lớp Lớp Reader có ba phương thức read() phương thức skip(), close(), ready(), mark(), reset() markSupported(): protected Reader() protected Reader(Object lock) public abstract int read(char[] text, int offset, int length) throws IOException public int read() throws IOException public int read(char[] text) throws IOException public long skip(long n) throws IOException public boolean ready() public boolean markSupported() public void mark(int readAheadLimit) throws IOException public void reset() throws IOException public abstract void close() throws IOException Phương thức read(char[] text, int offset, int length) phương thức qua hai phương thức read() lại cài đặt Một lớp cần phải override phương thức override phương thức close() Lớp Scanner PrintWriter dùng để làm gì? Nêu cấu tạo chúng? Tại hai lớp dùng nhiều ứng dụng mạng? *) Lớpp Scanner Lớp Scanner Java dùng để qt dịng vào (bàn phím, socket, xâu kí tự…) để lấy giá trị mong muốn: xâu kí tự, số nguyên, số thực,… Một số phương thức thường sử dụng lớp Scanner Java: Phương thức public String next() Mô tả Trả xâu kí tự trước khoảng trắng public String nextLine() Trả kết nội dung dòng public byte nextByte() Trả kiểu liệu byte public short nextShort() Trả kiểu liệu short public int nextInt() Trả kiểu liệu int public long nextLong() Trả kiểu liệu long public float nextFloat() Trả kiểu liệu float public double nextDouble() Trả kiểu liệu double *) Lớpp PrintWriter Lớp PrintWriter thay cho lớp PrintStream Java 1.0 Lớp thích hợp cho việc kiểm sốt ký tự mã hóa nhiều byte văn quốc tế Hầu hết phương thức hoạt động tương tự phương thức PrintStream ngoại trừ bốn phương thức write() Bốn phương thức write() không ghi byte mà ghi ký tự => Trong lập trình mạng nay, thường dùng lớp Scanner làm input stream PrintWriter làm output stream lớp hỗ trợ tốt việc đọc ghi nhiều kiểu liệu khác với phương thức linh hoạt, hiệu