关于java 流 的使用问题

zz郑英俊 2018-08-11 01:35:08
我现在需要向一个名为p的process写入指令
我现在是使用BufferedWriter写,
问题在于
如果通过BufferedWriter写完马上关掉流, p 就可以接收到指令
但是我如果需要向p写入不止一个指令但不知道是多少个指令。应该用什么方法呢?

我用忙循环试了一下 但是依然只有在关掉流的时候p才能接收到指令
网上查到的说要调用flush()刷新我也在忙循环里调用了 但还是不行

代码如下
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(Mainframe.p.getOutputStream()));
for(int n = 1;n>0;) {
if(mute!="") {
try {
bw.write(mute);
bw.flush();
System.out.println("指令输入完成");
mute="";
} catch (IOException e1) {
e1.printStackTrace();
mute="";
}
}
}
try {
bw.flush();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}

...全文
245 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zz郑英俊 2018-08-12
  • 打赏
  • 举报
回复
引用 2 楼 tianfang 的回复:
要看服务端如何处理指令。比如ftp服务,约定每个指令以 \r\n结束,那么服务器收到\r\n结束的字符串就解释执行。

你的服务器是如何约定单个指令结束的?服务端写的不好就只能在流关闭的时候处理

那如果是用完就关 要怎么重写才能再用管道呢

比如上面的bw管道 关闭之后 我把它new到另一个process,关掉。然后再new回到p
像这样
bw = new BufferedWriter(new OutputStreamWriter(Mainframe.p.getOutputStream()));
System.out.println("bw通道创建成功");
try {
bw.write(mute);
bw.flush();
System.out.println("指令输入完成");
mute="";
bw.close();
} catch (IOException e1) {
e1.printStackTrace();
mute="";
}
try {
ps = Runtime.getRuntime().exec("cmd /c");
} catch (IOException e) {
e.printStackTrace();
}
bw = new BufferedWriter(new OutputStreamWriter(ps.getOutputStream()));
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}

那我直接调用这个类为什么也不行呢
tianfang 2018-08-12
  • 打赏
  • 举报
回复
要看服务端如何处理指令。比如ftp服务,约定每个指令以 \r\n结束,那么服务器收到\r\n结束的字符串就解释执行。

你的服务器是如何约定单个指令结束的?服务端写的不好就只能在流关闭的时候处理
zz郑英俊 2018-08-12
  • 打赏
  • 举报
回复
或者说每次要输入指令的时候 怎么生成一个新的通道呢?
alunSemiconductor 2018-08-11
  • 打赏
  • 举报
回复
p是如何解析你的指令的呢? 如果可以,你把指令拼到一起发给P,由P进行解析后,按照N个指令执行
打开链接下载源码: https://pan.quark.cn/s/331a85e1b463 在数字化时代背景下,软件授权与保护显得极为关键,微狗(MicroDog)作为一款硬件加密狗,其主要功能是保障软件的合法使用,避免盗版和未经授权的访问。为了达成这一目的,微狗驱动发挥着不可或缺的作用。驱动程序充当硬件与操作系统之间的沟通纽带,确保两者能够和谐协作。现阶段,64位微狗驱动(UMI64位)已经兼容Windows 11、Windows 10以及Windows 7操作系统,为不同的系统环境提供坚实可靠的支持。 随着Windows操作系统的持续升级,对驱动程序的兼容性需求也在逐步提高。微狗驱动UMI64位版本正是为了应对兼容性问题而研发的。它不仅适配最新版的Windows 11,同时也与过去几年中普遍应用的Windows 10和Windows 7保持兼容。如此全面的系统支持,使得微狗加密狗能够在多种环境中稳定运作,确保软件授权管理不受操作系统版本的限制。 在这个驱动中,特别强调了支持UMI V4.1版本。UMI可能代表Unique Machine Identifier,即用于标识特定硬件设备的唯一序列号。提及UMI V4.1表明该驱动能够精准识别并支援微狗加密狗的此特定型号。同时,这也暗示驱动可能与其他版本的微狗硬件兼容,这意味着用户可以在不同版本的微狗加密狗之间切换而不必频繁更换驱动程序。 UMI64位标签凸显了驱动程序的核心特征,即它专为64位系统进行优化。相较于32位系统,64位系统在处理海量数据、运行大型应用时展现出显著优势,例如能够支持更大的内存地址空间。随着软件复杂性的提升,对硬件资源的需求持续增长,因此64位系统能够提供更优越的性能和稳定性。UMI系列硬件与...
内容概要:本文研究了一种基于粒子群算法(PSO)融合动态窗口法(DWA)的无人机三维动态避障路径规划方法,旨在提升无人机在复杂动态环境中的实时避障能力与路径优化性能。通过将全局搜索能力强的PSO与局部实时避障优越的DWA相结合,构建了一种兼具全局最优性与局部响应速度的混合规划策略,并在Matlab平台上实现了仿真验证。该方法有效解决了传统单一算法在动态环境中存在的收敛速度慢、实时性差或易陷入局部最优等问题,显著提高了无人机在三维空间中面对移动障碍物时的安全性与路径合理性。; 适合人群:具备一定算法基础和Matlab编程能力,从事无人机导航、智能优化算法、路径规划等相关领域的科研人员及研究生。; 使用场景及目标:①应用于复杂城市环境、灾害救援、巡检等动态场景下的无人机自主飞行任务;②为智能交通系统、移动机器人等领域提供高效的路径规划解决方案;③推动智能优化算法与实时控制方法的深度融合研究。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注PSO与DWA的融合机制、参数设置及仿真环境搭建,同时可通过调整障碍物分布与动态特性进行拓展实验,以掌握算法的适应性与优化潜力。

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧