Java IO(四)
在文件操作流中,输入输出的目标都是文件,但是有时候,我们并不需要写入文件,只是需要中转一下而已,这样就会显得很麻烦,所以我们就可以使用内存操作流。在内存操作流中,输入输出目标都是内存。
内存输出流: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(四)的更多相关文章
- Java IO(四)
对象序列化 对象序列化又叫对象的持久化,对象的串行化(或反串行化) 当使用Serializable接口实现序列化操作时,如果一个对象中的某个属性不希望被序列化,则可以使用transient关键字进行声 ...
- java IO(四):键盘录入
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 系统学习 Java IO (四)----文件的读写和随机访问 FileInputStream/FileOutputStream & RandomAccessFile
目录:系统学习 Java IO---- 目录,概览 文件输入流 FileInputStream 这是一个简单的FileInputStream示例: InputStream input = new Fi ...
- Java IO(四--字符流基本使用
在上一节,介绍了字节流的基本使用,本节介绍一下字符流的使用 Reader: public abstract class Reader implements Readable, Closeable { ...
- 系统学习 Java IO ---- 目录,概览
Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...
- Java IO编程全解(四)——NIO编程
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面讲到:Java IO编程全解(三)——伪异步IO编程 NIO,即New I/O,这 ...
- Java IO(四)——字符流
一.字符流 字节流提供了处理任何类型输入/输出操作的功能(因为对于计算机而言,一切都是0和1,只需把数据以字节形式表示就够了),但它们不可以直接操作Unicode字符,因为一个Unicode字符占用2 ...
- Java IO(十四) CharArrayReader 和 CharArrayWriter
Java IO(十四) CharArrayReader 和 CharArrayWriter 一.介绍 CharArrayReader 和 CharArrayWriter 是字符数组输入流和字符数组输出 ...
- Java IO(四) InputStream 和 OutputStream
Java IO(四) InputStream 和 OutputStream 一.介绍 InputStream 和 OutputStream 是字节流的超类(父类),都是抽象类,都是通过实例化它们的子类 ...
- Java IO学习笔记四:Socket基础
作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...
随机推荐
- C# MVC NPOI导出
前台: <form id="fmexp" method="post" target="_blank"> </form> ...
- 庖丁解牛Linux内核学习笔记(1)--计算机是如何工作的
存储程序计算机模型 冯诺依曼体系结构 冯诺依曼体系结构是存储程序计算机,什么叫存储程序计算机?从硬件角度说,假设有cpu和内存,两者通过总线连接,在cpu内部有一个寄存器叫ip(instruction ...
- Beta总结
45°炸 031502601 蔡鸿杰 031502604 陈甘霖 031502632 伍晨薇 一.写在Beta项目前 Beta 凡 事 预 则 立 二.GitHub传送门 Beta冲刺重要版本 三.用 ...
- 高级软件工程2017第7次作业--C++团队项目:Beta阶段综合报告
1.Beta阶段敏捷冲刺每日报告 Bate版敏捷冲刺报告--day0 Bate版敏捷冲刺每日报告--day1 Bate敏捷冲刺每日报告--day2 Bate敏捷冲刺每日报告--day3 Bate敏捷冲 ...
- python 二叉堆
BinaryHeap() 创建一个新的,空的二叉堆. insert(k) 向堆添加一个新项. findMin() 返回具有最小键值的项,并将项留在堆中. delMin() 返回具有最小键值的项,从堆中 ...
- php的数组的函数
1.可以将一个二位数组转化成两个一维数组,没有指定键就是默认的索引 注意二位数组有几种类型,其中最常见的一种是外层循环是一个索引数组,然后内层是一个关联数组.这种通过便利第一层,然后第二层指定关联词就 ...
- Aache的虚拟主机配置虚拟目录
3. 打开 httpd.conf 文件, 添加如下代码: # Virtual hosts Include conf/extra/httpd-vhosts.conf 如果已存在,将Include前面的# ...
- c# 几种深拷贝方式的比较
public static class Tools { //利用 BinaryFormatter 实现深拷贝 public static T DeepCopyByBinary<T>(thi ...
- Jetty入门(1-2)eclipse集成jetty插件并发布运行应用
一.eclipse集成jetty插件 1.从市场安装jetty插件 2.使用jetty插件发布应用和配置运行环境 debug配置默认共用上述run配置 3.使用jetty插件启动运行和停止运行选中的应 ...
- eclipse开发Groovy代码,与java集成,maven打包编译
今天尝试了一下在eclipse里面写Groovy代码,并且做到和Java代码相互调用,折腾了一下把过程记录下来. 首先需要给eclipse安装一下Groovy的插件,插件地址:https://gith ...