在文件操作流中,输入输出的目标都是文件,但是有时候,我们并不需要写入文件,只是需要中转一下而已,这样就会显得很麻烦,所以我们就可以使用内存操作流。在内存操作流中,输入输出目标都是内存。

内存输出流:ByteArrayOutputStream

内存输入流:ByteArrayInputStream

package com.fuwh.stream;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream; public class ByteArrarOutputInputStreamTest01{ public static void main(String[] args) throws Exception{
//想内存中写入内容,然后读取
String message="this is 内存操作流!";
InputStream is=new ByteArrayInputStream(message.getBytes()); //将message保存在内存输入流中
OutputStream os=new ByteArrayOutputStream(); //定义一个内存输出流
int temp=0;
while((temp=is.read())!=-1){ //从内存输入流中读取一个字节的内容
char c=(char) temp;
os.write(Character.toUpperCase(c));
}
System.out.println(os.toString());
}
}

PipedOutputStream管道输入流:

PipedInputStream管道输出流:

  管道流表示的是两个进程之间的通信。需要将两个管道进行连接。

实例:

package com.fuwh.stream;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream; //定义一个向管道写入的线程类
class Send implements Runnable { private PipedOutputStream output=null; public Send(){
this.output=new PipedOutputStream();
} public PipedOutputStream getPipedOutputStream(){
return this.output;
}
@Override
public void run() {
String sendMessage="what's the 操蛋!!!";
try {
output.write(sendMessage.getBytes());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
try {
this.output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} //定义一个从管道读入的线程类
class Receive implements Runnable{ private PipedInputStream input; public Receive(){
this.input=new PipedInputStream();
} public PipedInputStream getPipedInputStream(){
return this.input;
} @Override
public void run() {
// TODO Auto-generated method stub
byte b[]=new byte[1024];
int length=0;
try {
length=this.input.read(b);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
this.input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new String(b,0,length));
} } public class PipedStreamTest01 {
public static void main(String[] args) throws IOException {
Send send=new Send();
Receive receive=new Receive();
send.getPipedOutputStream().connect(receive.getPipedInputStream());
new Thread(send).start(); //启动线程
new Thread(receive).start(); //启动线程
}
}

管道字符输出流PipedWriter:

管道字符输入流PipedReader:

实例:

package com.fuwh.stream;

import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter; //定义一个写入管道的线程类
class Out implements Runnable{ private PipedWriter out; public Out(){
this.out=new PipedWriter();
} public PipedWriter getPipedWriter(){
return this.out;
} @Override
public void run() {
// TODO Auto-generated method stub
String writerMessage="in 苦逼 find 乐趣!!!";
try {
this.out.write(writerMessage);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
try {
this.out.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
} //定义一个读取管道中内容的线程类
class In implements Runnable{ private PipedReader in; public In(){
this.in=new PipedReader();
} public PipedReader getPipedReader(){
return this.in;
} @Override
public void run() {
// TODO Auto-generated method stub
char[] message=new char[1024];
int length=0;
try {
length=this.in.read(message);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println(new String(message,0,length));
} } public class PipedReaderWriterTest01 {
public static void main(String[] args) throws IOException {
Out out=new Out();
In in=new In();
out.getPipedWriter().connect(in.getPipedReader());
new Thread(out).start();
new Thread(in).start();
}
}

对象输出流:ObjectOutputStream

对象输入流:ObjectInputStream

对象流实现了对象的传输,但是只有实现了Serializable接口或Externalizable接口的类才能被传输。该类的构造方法如下:

  ·ObjectOutputStream()

  ·ObjectOutputStream(OutputStream out)

从第二个构造方法可以看出,该类根据实例化的方式不同,可以想不同的地方写入对象。

实例:

package com.fuwh.stream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable; class Student implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private int age; public Student(){} public Student(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
} }
public class FileObjectStreamTest01 { public static void main(String[] args) throws Exception {
//向文件中写入对象
Student s=new Student("刘备",33);
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(new File("object.txt")));
oos.writeObject(s);
oos.close();
//从文件中读取对象
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(new File("object.txt")));
Student newStudent=(Student)ois.readObject();
System.out.println(newStudent);
ois.close();
}
}

Java IO(四)的更多相关文章

  1. Java IO(四)

    对象序列化 对象序列化又叫对象的持久化,对象的串行化(或反串行化) 当使用Serializable接口实现序列化操作时,如果一个对象中的某个属性不希望被序列化,则可以使用transient关键字进行声 ...

  2. java IO(四):键盘录入

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  3. 系统学习 Java IO (四)----文件的读写和随机访问 FileInputStream/FileOutputStream & RandomAccessFile

    目录:系统学习 Java IO---- 目录,概览 文件输入流 FileInputStream 这是一个简单的FileInputStream示例: InputStream input = new Fi ...

  4. Java IO(四--字符流基本使用

    在上一节,介绍了字节流的基本使用,本节介绍一下字符流的使用 Reader: public abstract class Reader implements Readable, Closeable { ...

  5. 系统学习 Java IO ---- 目录,概览

    Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...

  6. Java IO编程全解(四)——NIO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面讲到:Java IO编程全解(三)——伪异步IO编程 NIO,即New I/O,这 ...

  7. Java IO(四)——字符流

    一.字符流 字节流提供了处理任何类型输入/输出操作的功能(因为对于计算机而言,一切都是0和1,只需把数据以字节形式表示就够了),但它们不可以直接操作Unicode字符,因为一个Unicode字符占用2 ...

  8. Java IO(十四) CharArrayReader 和 CharArrayWriter

    Java IO(十四) CharArrayReader 和 CharArrayWriter 一.介绍 CharArrayReader 和 CharArrayWriter 是字符数组输入流和字符数组输出 ...

  9. Java IO(四) InputStream 和 OutputStream

    Java IO(四) InputStream 和 OutputStream 一.介绍 InputStream 和 OutputStream 是字节流的超类(父类),都是抽象类,都是通过实例化它们的子类 ...

  10. Java IO学习笔记四:Socket基础

    作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...

随机推荐

  1. 对Java的初步的认识:

    学习JAVA的优势 1) Java广受欢迎 Java是世界上最受欢迎的编程语言之一,有无限多种方法使用Java.据2016年数据显示,Java被评为最受欢迎的编程语言之一2)  Java薪资比较好最新 ...

  2. JavaScript(第五天)【流程控制语句】

    ECMA-262规定了一组流程控制语句.语句定义了ECMAScript中的主要语法,语句通常由一个或者多个关键字来完成给定的任务.诸如:判断.循环.退出等.   一.语句的定义   在ECMAScri ...

  3. JAVA使用和操作properties文件

    java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properti ...

  4. 2017 清北济南考前刷题Day 3 afternoon

    期望得分:100+40+100=240 实际得分:100+40+100=240 将每个联通块的贡献乘起来就是答案 如果一个联通块的边数>点数 ,那么无解 如果边数=点数,那么贡献是 2 如果边数 ...

  5. 用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载

    用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载,将一个完整的项目进行展示,主要有以下几个部分: 1.servlet部分   Export 2.工具类:TxtFileU ...

  6. EasyUI 中datagrid 分页。

    注释:datagrid分页搞了好几天才完全搞好,网上没完全的资料.明天晚上贴代码. 睡觉.

  7. python 学习笔记

    1. 关于两者详细解释,参考链接:www.crifan.com/python_re_search_vs_re_findall/ 代码图

  8. 看到一个对CAP简单的解释

    一个分布式系统里面,节点组成的网络本来应该是连通的.然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域.数据就散布在了这些不连通的区域中.这就叫分区.当你一个数据项只在一个节点中 ...

  9. java 零基础搭建dubbo运行环境

    一:简介    以前做项目时,分布式环境都是其它同事在搭建,自己也没参与分布式环境搭建,只负责开发,由于近段时间工作重心转到android,java后台有一段时间没有接触了,刚好这几天有空,决定自己动 ...

  10. SQL Server数据库优化的10多种方法

    巧妙优化sql server数据库的几种方法,在实际操作中导致查询速度慢的原因有很多,其中最为常见有以下的几种:没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷). I/O吞吐量小, ...