一、字符串流

定义:字符串流(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. UWP 带左右滚动按钮的横向ListView———仿NetFlix首页河的设计

    也是之前写的控件了,模仿NetFlix的河的设计. 大体要求如下: 1. 横向的ListView 2. 左右按钮,可以左右移动河卡片,左右的滚动条不可见 3. 左右按钮仅在鼠标Hover事件中可见 大 ...

  2. jdbc 加载数据库驱动如何破坏双亲委托模式

    导读      通过jdbc链接数据库,是每个学习Java web 方向的人必然一开始会写的代码,虽然现在各路框架都帮大家封装好了jdbc,但是研究一下jdbc链接的套路还是很意义     术语以及相 ...

  3. python经典面试算法题1.3:如何计算两个单链表所代表的数之和

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.2 如何实现链表的逆序 [华为笔试题] 难度系数:⭐⭐⭐ ...

  4. linux redhat系列后缀为el5,el6,el7软件包的区别

    - EL6软件包用于在Red Hat 6.x, CentOS 6.x, and CloudLinux 6.x进行安装 - EL5软件包用于在Red Hat 5.x, CentOS 5.x, Cloud ...

  5. SpringBoot 整合NoSql

    通用配置 maven依赖 添加Spring-Web和Spring-Security依赖,使用Spring-Security是因为使用SpringBoot的Redis依赖时,必须添加Spring-Sec ...

  6. office 2019 激活

    office 2019 激活: 1.新建文本文档   激活.txt 2.复制以下内容到    激活.txt 中 @echo off (cd /d >& title Office Acti ...

  7. Test Complete 的自动化测试 --- 三角形

    Test Complete 的自动化测试 --- 三角形 PS:工具:Test Complete , OS:win 10 这里做三角形的测试与上一篇博客做计算器的测试大致一样,都是对.exe的执行文件 ...

  8. 【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.欢迎 Sta ...

  9. 《JAVA 程序员面试宝典(第四版)》读书笔记之前言

    工作五年了一直在小的软件公司混,总感觉自己的专业知识没有太大的提升.当然了中间也换了一两家公司,面试的公司就很多家,总感觉正规的软件公司(无论大小)对于基础知识的考核都非常重视,而不管你说你之前服务过 ...

  10. shell配置文件

    个人配置主要集中在-/.profile文件中 打开新的交互式shell时,配置文件的执行顺序是/etc/profile  /etc/bashrc  ~/.profile   最后是~/.bashrc ...