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 ...
随机推荐
- web api 安全设计(1)
环境:后台 ASP.NET Web API ,前端为 html,js(跨域访问) 场景1: 客户端自保管RSA 公钥和密钥,签名为客户端私钥签名,服务端用客户端公钥进行签名验证 场景2: 客户端使用S ...
- QT5.8 for embedded
http://doc.qt.io/qt-5/embedded-linux.html 先占座~
- C语言-最后一次作业
1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 我当初选择计算机专业是因为我是真的很向往计算机这方 ...
- C语言--第四周作业
一.题目7-1 计算分段函数[1] 1.代码 #include <stdio.h> int main () { float x,result; scanf("%f",& ...
- Linux下关闭Tomcat残留线程
ps -ef | grep tomcat kill -9 {pid}
- Scala Option类型
转载自: Scala 初学者指南, 这里有一系列很棒的文章 类型 Option 可能你已经见过它在 Map API 中的使用:在实现自己的提取器时,我们也用过它, 然而,它还需要更多的解释. 你可能会 ...
- JAVA_SE基础——10.变量的作用域
<pre name="code" class="java"> 上个月实在太忙了,从现在开始又可以静下心来写blog了. 变量的作用域指 可以使用此变 ...
- api-gateway实践(10)新服务网关 - OpenID Connect
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- python Http协议
Http协议 一 HTTP概述 HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则. HTTP就是一个通信 ...
- 尼姆博弈(Nimm's Game)
题型: 有3堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取1个,多者不限,最后取光者得胜. 思路 首先自己想一下,就会发现只要最后剩两堆物品一样多(不为零),第三堆为零,那面对这种局 ...