一、字符串流

定义:字符串流(StringReader),以一个字符为数据源,来构造一个字符流。

作用:在Web开发中,我们经常要从服务器上获取数据,数据返回的格式通常一个字符串(XML、JSON),我们需要把这个字符串构造为一个字符流。然后再用第三方数据解析器来解析数据。

代码示例:计算一个字符串有多少个单词

package IODemo;

import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader; /**
* 注意 有可能是面试题目
*
*/ public class StringStreamDemo { private static void stringReader(){ String str = "good good study day day up";
StringReader sr = new StringReader(str);
// 流的标记器(分析这个流里面的内容) 字符值用于查找字符的五个可能属性: 空格 , 字母 , 数字 , 字符串引号和注释字符 。 每个角色都可以有零个或多个这些属性。
StreamTokenizer st = new StreamTokenizer(sr);
int count = 0;
// ttype 在读取后的这个标记类型等于结尾的话就要一直循环读
while (st.ttype != StreamTokenizer.TT_EOF){
try {
//如果 读了这个流里面的内容的是一个单词的话 就累加
if (st.nextToken() == StreamTokenizer.TT_WORD){
count++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("count="+count);
sr.close();
} public static void main(String[] args) { stringReader();
}
}

二、管道流 

管道输入流:

PipedInputStream:
  • 管道输入流应连接到管道输出流; 管道输入流然后提供写入管道输出流的任何数据字节。
  • 典型地,数据被从一个读PipedInputStream对象由一个线程并且数据被写入到对应的PipedOutputStream通过一些其它线程。
  • 不建议尝试从单个线程使用这两个对象,因为它可能会使线程死锁。
  • 管道输入流包含一个缓冲区,在读取操作中将读取操作与限制内的操作相分离的管道被认为是broken如果正在提供的数据字节到连接的管道输出流中的线程不再存活。

管道输出流:

PipedOutputStream:
  • 管道输出流可以连接到管道输入流以创建通信管道。 管道输出流是管道的发送端。
  • 典型地,数据被写入到一个PipedOutputStream由一个线程对象和数据被从连接读取PipedInputStream通过一些其它线程。
  • 不建议尝试从单个线程使用这两个对象,因为它可能会使线程死锁。 管被说成是broken如果从连接读取数据字节的螺纹管道输入流不再存活。

代码示例:

package IODemo;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
/**
*
* 管道输入流应连接到管道输出流; 管道输入流然后提供写入管道输出流的任何数据字节。
* 典型地,数据被从一个读PipedInputStream对象由一个线程并且数据被写入到对应的PipedOutputStream通过一些其它线程。
* 不建议尝试从单个线程使用这两个对象,因为它可能会使线程死锁。
* 管道输入流包含一个缓冲区,在读取操作中将读取操作与限制内的操作相分离。 的管道被认为是broken如果正在提供的数据字节到连接的管道输出流中的线程不再存活。
*/
public class PipedStreamDemo {
public static void main(String[] args) {
PipedInputStream pin = new PipedInputStream();
PipedOutputStream pout = new PipedOutputStream(); try {
pin.connect(pout); //将两个管道进行连接 输入流与输出流进行连接 } catch (IOException e) {
e.printStackTrace();
}
Pipwriter pipwriter = new Pipwriter(pout);
PipReader pipReader = new PipReader(pin);
new Thread(pipReader).start(); //先启动读的,再启动写的,让读的先在哪里等待
new Thread(pipwriter).start(); }
} class Pipwriter implements Runnable{
private PipedOutputStream pout = new PipedOutputStream(); public Pipwriter(PipedOutputStream pout) {
this.pout = pout;
}
@Override
public void run() {
String str = "我是落魄书生!";
try {
pout.write(str.getBytes());
pout.close();
} catch (IOException e) {
e.printStackTrace();
} }
} class PipReader implements Runnable{
private PipedInputStream pin = new PipedInputStream(); public PipReader(PipedInputStream pin) {
this.pin = pin;
}
@Override
public void run() {
byte[] bytes = new byte[1024];
try {
int len = pin.read(bytes); //read 会阻塞 len实际的长度
String str = new String(bytes,0,len); // 通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String
System.out.println("读到:"+str);
pin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Java基础IO类之字符串流(查字符串中的单词数量)与管道流的更多相关文章

  1. Java基础IO类之打印流

    package IODemo; import java.io.*; /* 打印流 : 很方便的进行输出 字节打印流 增强输出功能 字符打印流 */ public class PrintStreamDe ...

  2. Java基础IO类之缓冲流

    首先要明确一个概念: 对文件或其他目标频繁的读写操作,效率低,性能差. 使用缓冲流的好处是:能够高效的读写信息,原理是先将数据先缓冲起来,然后一起写入或者读取出来. 对于字节: BufferedInp ...

  3. Java基础IO类之对象流与序列化

    对象流的两个类: ObjectOutputStream:将Java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutputStrea ...

  4. Java基础IO类之字节数组流

    package IODemo; //字节数组流 :内部维护这着一个字节数组,我们可以利用流的读取机制来处理字符串 无需关闭,不会报IO异常 // ByteArrayInputstream ByteAr ...

  5. Java基础IO类之字节输入输出流

    一.IO流概述 1.IO流:输入输出流(Input/Output) 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象,即数据在设备间的传输流, 流的本质是数据传输,根据数据传输特性将 ...

  6. Java基础IO类之File类

    大三了,目前基础太差了,重新学习过!代码如下,里面都有详细的解释每一行代码代表的意思~ package IODemo; import java.io.File; import java.io.File ...

  7. Java基础IO类之数据流

    DataInputStream: 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本java数据类型.应用程序可以使用数据输出流 写入稍后由数据输入流读取的数据.DataInputStrea ...

  8. Java基础-IO流对象之File类

    Java基础-IO流对象之File类 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IO技术概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下 ...

  9. Java基础-IO流对象之字符类(FileWrite与FileReader)

    Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...

随机推荐

  1. Blue:贪心,单调队列

    考场上什么都没想. 显然在扯淡了,应该说是刚开始想了一些没用的. 有决策单调性,所以二分答案? 好,那就二分答案.想想怎么检查每只蛤能不能都跳到终点? 那么每只蛤都不能掉队啊. 如果你现在遇到了一个石 ...

  2. php imagick蒙版做法

    php imagick蒙版做法<pre> $image = new \Imagick(); $image->readImage(__DIR__ . '/mengban.png'); ...

  3. Linux下mysql 多实例安装配置

    首先我们要清楚什么是多实例?所谓多实例就是用多个配置文件来启动多个不同端口的进程,以不同的端口的形式为外提供服务.明白了多实例 我们下面的操作和配置就一目了然了首先我们要安装一套基础的应用程序,也就是 ...

  4. sso单点登录系统

    sso单点登录概念 1.一处登录,处处登录.会单独做一个单点登录系统,只负责颁发token和验证token,和页面登录功能. 2.通过在浏览器cookie中放入token,和在redis中对应toke ...

  5. Oracle 数据库基础:数据查询与操作

    SELECT uname FROM TUser WHERE uname=‘admin’ SELECT 字段名列表 FROM 表名 WHERE 条件; 在Oracle数据库中,对象是属于模式的,每个账户 ...

  6. mysql 创建用户及授权(2)

    一. MySQL初始密码 新安装的MySQL默认是没有密码的,设置初始密码可以用以下命 mysqladmin -u root password 'new-password' mysqladmin -u ...

  7. DAL

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;u ...

  8. 网络权重初始化方法总结(下):Lecun、Xavier与He Kaiming

    目录 权重初始化最佳实践 期望与方差的相关性质 全连接层方差分析 tanh下的初始化方法 Lecun 1998 Xavier 2010 ReLU/PReLU下的初始化方法 He 2015 for Re ...

  9. 2019-9-25:渗透测试,基础学习,Hydra BP爆破,js基本知识,banner信息收集笔记

    使用BP和Hydra爆破相关的服务hydra:九头蛇,开源的功能强大的爆破工具,支持的服务有很多,使用hydra爆破c/s结构的服务,使用bp爆破web登陆窗口爆破需要的几个条件,爆破工具+字典字典: ...

  10. 内网环境搭建NTP服务器

    说在前面:ntp和ntpdate区别 ①两个服务都是centos自带的(centos7中不自带ntp).ntp的安装包名是ntp:ntpdate的安装包是ntpdate.他们并非由一个安装包提供. ② ...