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

内存输出流: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. Intellij Idea下tomcat设置自动编译

    *eclipse默认tomcat下是自动完成编译:而Intellij Idea默认tomcat下不是自动完成编译,从如下开始设置: 进入"settings",如下图找到" ...

  2. Alpha冲刺总结

    团队成员 陈家权 031502107 赖晓连 031502118 雷晶 031502119 林巧娜 031502125 庄加鑫 031502147 一.项目预期计划及现实进展 项目预期计划 现实进展 ...

  3. 2017级C语言教学总结

    一个学期下来,对于这门课教学还是感受挺多,多个教学平台辅助,确实和我前10年的教学方式区别很多,也辛苦很多. 一.课堂教学方面 1.课堂派预习作业 主要借助课堂派平台,每次课前发布预习作业.而预习作业 ...

  4. DEVC使用问题集锦

    一.DEVC++编译出现"Id return 1 exit status" 这是初学者刚用DEVC经常碰到问题,一般有如下解决方法: 1.首先检查下是否有c的exe程序开着,若开着 ...

  5. 网络1712--c语言第二次作业总结

    1.作业亮点 1.1在调试问题方面有明显进步,变量声明方面有所改变,没有发现大面积抄袭现象. 1.2 以下几位同学博文写的较为优秀,可作为范例供大家参考 田亚琴--代码格式良好,思路清晰,调试部分图文 ...

  6. 【Alpha版本】冲刺阶段 - Day4 - 加速

    今日进展 袁逸灏:实现音乐的播放.(5h) 启动类,游戏画面类(修改类) 刘伟康:继续借鉴其他 alpha 冲刺博客,了解了Android方面的部分内容,便于更好地推进进度.(2h) 刘先润:更新图画 ...

  7. JAVA面向对象的多态性

    什么是多态?简而言之就是相同的行为,不同的实现. 而多态也分为静态多态(重载).动态多态(重写)和动态绑定. 静态动态,实际就是指的重载的概念,是系统在编译时,就能知晓该具体调用哪个方法.动态多态指在 ...

  8. DES MEI号码加密

    对于加密来说,使用DES加密解密很好,但是为了使不同设备的密文不一样,可以使用 固定字符串 + 设备IMEI号码 加密的方式,这样可以分辨不同手机,限制手机的使用(若是注册,一个手机只有一个IMEI号 ...

  9. 《高级软件测试》web测试实践--12月31日记录

    今日的任务进度如上图所示.我们对华科软件学院和计算机学院的网站进行了对比分析,分析的角度包括基本功能分析.前端性能分析.用户调研等.在这里我们简单总结下我们得到的评测结果. 基本功能分析:计算机学院和 ...

  10. caffe使用ctrl-c不能保存模型

    caffe使用Ctrl-c 不能保存模型: 是因为使用的是 tee输出日志 解决方法:kill -s SIGINT <proc_id> 或者使用 GLOG_log_dir=/path/to ...