Java IO: 管道

转载自  Java IO: 管道

 

译文链接 作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com)

Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力。所以管道也可以作为数据源以及目标媒介。

你不能利用管道与不同的JVM中的线程通信(不同的进程)。在概念上,Java的管道不同于Unix/Linux系统中的管道。在Unix/Linux中,运行在不同地址空间的两个进程可以通过管道通信。在Java中,通信的双方应该是运行在同一进程中的不同线程。

 

通过Java IO创建管道

可以通过Java IO中的PipedOutputStream和PipedInputStream创建管道。一个PipedInputStream流应该和一个PipedOutputStream流相关联。一个线程通过PipedOutputStream写入的数据可以被另一个线程通过相关联的PipedInputStream读取出来。

Java IO管道示例

这是一个如何将PipedInputStream和PipedOutputStream关联起来的简单例子:

注:本例忽略了流的关闭。请在处理流的过程中,务必保证关闭流,或者使用jdk7引入的try-resources代替显示地调用close方法的方式。

你也可以使用两个管道共有的connect()方法使之相关联。PipedInputStream和PipedOutputStream都拥有一个可以互相关联的connect()方法。

管道和线程

请记得,当使用两个相关联的管道流时,务必将它们分配给不同的线程。read()方法和write()方法调用时会导致流阻塞,这意味着如果你尝试在一个线程中同时进行读和写,可能会导致线程死锁。

管道的替代

除了管道之外,一个JVM中不同线程之间还有许多通信的方式。实际上,线程在大多数情况下会传递完整的对象信息而非原始的字节数据。但是,如果你需要在线程之间传递字节数据,Java IO的管道是一个不错的选择。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一款全新的基于IntelliJ和ReSharper的跨平台.NET IDE

JetBrains Rider在今年一月份露面,后来的大部分时间被用在了内部早期预览版上,还没有为公开发布做好准备。而现在,我们可以下载早期预览版,并感受在IntelliJ平台上开发.NET是一种什么体验。早期预览版还存在一些问题,不…

mysql自动插入的时间不对 差8小时

MySQL插入时间差八小时问题的解决方法 更新时间:2019年12月15日 10:19:12 转载 作者:lankeren 这篇文章主要给大家介绍了关于MySQL插入时间差八小时问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具…

windows为什么把linux打败了,快二十年了,人们为什么还是没有抛弃 Windows 转向 Linux?...

原标题:快二十年了,人们为什么还是没有抛弃 Windows 转向 Linux?自伟大的 Linux 操作系统诞生以来, 许多网友都试图列举出 Linux 可能是更好选择的具体原因 ,其中包括:Linux 上的更新速度很快,“…

Java IO 概述

转载自 Java IO 概述 译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) 校对:方腾飞 在这一小节,我会试着给出Java IO(java.io)包下所有类的概述。更具体地说,我会根据类的用途对类进行分组。这个分组将会使你在未来的工…

ASP.NET Core WebListener 服务器

WebListener是一个只能运行在Windows上的ASP.NET Core web服务器,基于Http.Sys内核模块驱动构建。在不借助IIS作为反向代理服务器的情况下,WebListener可以替代Kestrel用来与直接与互联网相连。实际上,WebListener不能和IIS或IIS Express一起…

git删除本地分支、删除远程分支 复制分支

git删除本地分支、删除远程分支 It_BeeCoder 2019-05-15 09:47:20 80268 收藏 15 展开 https://blog.csdn.net/lihua5419/article/details/81706905 1、查看所有分支 git branch -a 2、查看当前所在分支 git branch 3、删除本地的bug_xzx分支 git branch -d bug_xzx 4…

ASP.NET Core的Kestrel服务器

Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器,libuv是一个跨平台的异步I/O库。ASP.NET Core模板项目使用Kestrel作为默认的web服务器。 Kestrel支持以下功能: HTTPS用于启用不透明升级的WebSockets位于Nginx之后的高性能Unix sockets Kestrel …

RandomAccessFile

转载自 RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。 RandomAccessFile不属于I…

JSR303常见参数

常见参数 NotNull(message "名字不能为空")private String userName;Max(value 120, message "年龄最大不能查过120")private int age;Email(message "邮箱格式错误")private String email;空检查Null 验证对象是否为nullNotNull 验证对象是…

ASP.NET Core服务器综述

ASP.NET Core应用通过一个进程内的HTTP服务器实例实现运行,这个服务器实例侦听HTTP请求并将请求作为组成HttpContext的一组请求功能集暴露给我们的应用程序。 ASP.NET Core搭载两个服务器实现: Kestrel是一个基于libuv的跨平台HTTP服务器,lib…

linux中usb设备名,Linux 中识别 USB 设备名字的 4 种方法

摘要: 对于初学者来说,在 Linux 系统里你必须掌握的技术之一就是识别出插入系统里的各种设备。这也许是你的系统硬盘、外部的存储设备或者是可移动设备,比如 USB 设备或 SD 闪存卡等。 现如今,使用 USB 设备来传输文件是十分常见的…

探究Java File类中list()、listFiles()的使用及区别,认识和使用匿名内部类

转载自 探究Java File类中list()、listFiles()的使用及区别,认识和使用匿名内部类 内容概要: 1、认识File类; 2、File的构造函数; 3、list()及其重载方法的使用,匿名内部类的两种使用方式; 4、list…

自动配置原理---SpringBoot

自动配置原理 配置文件到底能写什么?怎么写? SpringBoot官方文档中有大量的配置,我们无法全部记住 分析自动配置原理 我们以**HttpEncodingAutoConfiguration(Http编码自动配置)**为例解释自动配置原理;…

Docker 部署dotnetcore

安装docker 系统还是之前centos 7.1 https://www.docker.com/products/docker#/linux yum update 创建源: /etc/yum.repos.d/docker.repo tee /etc/yum.repos.d/docker.repo <<-EOF [dockerrepo] nameDocker Repository baseurlhttps://yum.dockerproject.org/repo/main/…

虚拟机安装windows ghost版本系统记录完整过程

重点 1.磁盘一定要分成2个 2.直接安装第一个盘 就是进入CD后选1 自动安装 https://blog.csdn.net/hanzl1/article/details/79298787 虚拟机安装windows ghost版本系统记录完整过程 NO如果 2018-02-09 15:26:08 15193 收藏 5 分类专栏&#xff1a; windows 虚拟机 版权 …

linux下kill指令默认信号,Linux基础命令之kill命令

相信大家在使用Linux的过程中都会遇到过某个程序出错导致系统锁死的情况&#xff0c;按照常规的思维我们会通过重启来重新启动系统。然而事实上在Linux中并不需要进行重启就能够完成出错程序的关闭操作。在Linux中我们可以通过使用"kill"命令来强制终结它。那么到底它…

Supervisor 守护 dotnetcore 程序

环境准备 1.设置nginx 服务开机启动 systemctl enable nginx.servic 2.安装Supervisor yum install python-setuptools easy_install supervisor 3.配置Supervisor mkdir /etc/supervisorecho_supervisord_conf > /etc/supervisor/supervisord.conf#指定配置文件supervisord…

import javax.servlet.ServletRequest 关于IDEA javax.servlet.http.HttpServletRequest 不存在 解决方案

https://blog.csdn.net/a290450134/article/details/80964726 关于IDEA javax.servlet.http.HttpServletRequest; 不存在 解决方案 渊丹 2018-07-09 08:32:08 16576 收藏 8 分类专栏&#xff1a; 学习笔记 工具配置 版权 昨天从eclipse导入了一个web项目到idea&…