关于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();
}

...全文
145 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个指令执行

50,637

社区成员

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

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