同步阻塞式I/O(一)——基于字节的InputStream、OutputStream

来源:互联网 发布:java做题网站 编辑:程序博客网 时间:2024/05/29 11:32

 同步并阻塞式I/O亦称为旧I/O,即我们平时所使用的那些基本的I/O操作。服务器实现模式为一个连接启动一个线程,每个线程亲自处理 I/O 并且一直等待 I/O 直到完成,即客户端有连接请求时服务器端就需要启动一个线程进行处理。同步并阻塞式I/O可分为两大类:

一、基于字节的InputStream和OutputStream

二、基于字符的Writer和Reader 

本篇文章先介绍第一类:

InputStream相关类层次结构:


 OutputStream相关类层次结构:



有了上面的结构图我们就比较清晰的了解InputStream与outputStream以及其子类,具体的代码示例如下:

package inputstream;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.OutputStream;import java.io.PipedInputStream;import java.io.PipedOutputStream;import java.io.Serializable;public class InputStream1 {public static void main(String[] args) {String fileName = "D:"+File.separator+"file.txt";File file = new File(fileName);if(!file.exists()){try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}/** * FileOutputStream与FileInputStream */try {OutputStream os = new FileOutputStream(file);String str = "你好!";byte[] a = str.getBytes();os.write(a);os.close();InputStream in = new FileInputStream(file);byte[] b = new byte[(int) file.length()];in.read(b);in.close();System.out.println(new String(b));} catch (Exception e) {e.printStackTrace();}/** * ByteArrayOutputStream与ByteArrayInputStream */try {ByteArrayOutputStream bos = new ByteArrayOutputStream();int a = 0;int b = 1; int c = 2;bos.write(a);bos.write(b);bos.write(c);byte[] buf = bos.toByteArray();bos.close();ByteArrayInputStream bin = new ByteArrayInputStream(buf);int data = 0;while((data=bin.read())!=-1){System.out.println(data);}bin.close();} catch (IOException e) {e.printStackTrace();}/** * PipedInputStream与PipedOutputStream */Sender sender = new Sender();  Receiver receiver = new Receiver();  PipedOutputStream outStream = sender.getOutStream();  PipedInputStream inStream = receiver.getInStream();  try {  outStream.connect(inStream);  } catch (Exception e1) {  e1.printStackTrace();  }  sender.start();  receiver.start();/** * ObjectInputStream与ObjectOutputStream */Student s = new Student(1001,"小明");FileOutputStream fos;try {fos = new FileOutputStream("student.txt");ObjectOutputStream out = new ObjectOutputStream(fos);out.writeObject(s);out.close();fos.close();FileInputStream fis = new FileInputStream("student.txt");ObjectInputStream ois = new ObjectInputStream(fis);s = (Student)ois.readObject();System.out.println("id:"+s.getId()+" name: "+s.getName());ois.close();fis.close();} catch (Exception e) {e.printStackTrace();}/** * BufferedInputStream与BufferedOutputStream * DataInputStream与DataOutputStream */try {FileOutputStream fos1 = new FileOutputStream("data1.txt");BufferedOutputStream bos1 = new BufferedOutputStream(fos1);DataOutputStream dos = new DataOutputStream(bos1);String str1 = "大家好!";dos.writeUTF(str1);byte[] b = str1.getBytes();dos.write(b);dos.close();bos1.close();fos1.close();FileInputStream fis1 = new FileInputStream("data1.txt");BufferedInputStream bis = new BufferedInputStream(fis1);DataInputStream dis = new DataInputStream(bis);System.out.println(dis.readUTF());byte[] b1 = new byte[1024];dis.read(b1);dis.close();bis.close();fis1.close();System.out.println(new String(b1));} catch (IOException e) {e.printStackTrace();}}  }class Sender extends Thread{private PipedOutputStream outStream = new PipedOutputStream();public PipedOutputStream getOutStream() {  return outStream;  }  public void run() {  String info = "hello world!";  try {  outStream.write(info.getBytes());  outStream.close();  } catch (Exception e) {  e.printStackTrace();  }  }  }class Receiver extends Thread {  private PipedInputStream inStream = new PipedInputStream();  public PipedInputStream getInStream() {  return inStream;  }  public void run() {  byte[] buf = new byte[1024];  try {  inStream.read(buf);  System.out.println("receive message from sender : " + new String(buf));  inStream.close();  } catch (Exception e) {  e.printStackTrace();  }  }   }class Student implements Serializable{private static final long serialVersionUID = 1L;private int id;private String name;public Student(int id, String name) {super();this.id = id;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

图片来自:http://www.ibm.com/developerworks/cn/java/j-lo-javaio/ 

0 0