同步阻塞式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
- 同步阻塞式I/O(一)——基于字节的InputStream、OutputStream
- JavaIO 2—流式I/O之InputStream、OutputStream介绍
- 同步阻塞式I/O(二)——基于字符的Writer、Reader
- 同步非阻塞I/O——NIO(一)基于文件操作
- JAVA——字节流: InputStream /OutputStream
- JAVA I/O中面向字节的InputStream和OutputStream以及面向字符的Reader和Writer简介
- JAVA I/O中面向字节的InputStream和OutputStream以及面向字符的Reader和Writer简介
- JAVA I/O中面向字节的InputStream和OutputStream以及面向字符的Reader和Writer简介
- 同步非阻塞I/O——NIO(二)基于网络操作
- unix下的I/O——阻塞,非阻塞,同步,异步
- IO流——(字节流)OutputStream和InputStream
- JavaSE I/O 输出字节流 OutputStream
- IO流的字节流InputStream、OutputStream
- Java I/O总结——OutputStream
- Java I/O总结——OutputStream
- 同步阻塞式I/O模型
- 同步阻塞式I/O编程
- 对I/O阻塞、非阻塞;同步I/O、异步I/O的理解
- struts2 自定义过 滤器
- 有用的网址
- 添加修改sa用户(数据库授权总结)
- C++的XML编程经验――LIBXML2库使用指南
- Python.boolean
- 同步阻塞式I/O(一)——基于字节的InputStream、OutputStream
- SelectSort
- C——宏定义,条件编译
- android应用程序优化之布局优化
- 二维正态分布的参数与概率密度图形
- Java文件 File类的一些方法(2)
- java写入文件的几种方法分享
- 用java语言怎么写hdu题目之输入规则
- 第五章