由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 问一个blocking IO的程序
相关主题
新手求教 BufferedReader.readLine()BufferedWriter里的write()
怎么从键盘输入整数或float?how to use grep/sed to remove newlines? (转载)
JAVA文本文件读写问题[转载] smtp server in java?
从文件读入数据得到的是bytes新手请教怎样在Java里读文本文件中的内容
help! string format???关于char和int的问题
如何关闭打开的输入输出?请教问题,怎么确定空行!
一个Java程序员的话(4)--续第一章急问如何append double 数据到txt文件
请教一个问题,thanks!请问同时执行几个bat文件的问题
相关话题的讨论汇总
话题: string话题: import话题: writer话题: public话题: readline
进入Java版参与讨论
1 (共1页)
n******1
发帖数: 3756
1
我在网上看到这两段代码,一个写,一个读,但是好像是有问题的.我看写是没问题的
,我把queue打出来,输入的都有,但是reader的读行为非常奇怪,如果文件有内容,
可以读出来,但是重新写入的有时候能读一部分,比如writer写入abcde,可能read到ab
出来,但大部分时间都是null,尝试自己加过在writer加入sleep,wait什么都没用
Writer.java
import java.io.BufferedWriter;
import java.io.Console;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Writer {
private final BlockingDeque queue;
private final String filename;
public static void main(String[] args) throws Exception {
final Console console = System.console();
final Writer writer = new Writer("pipe");
writer.init();
while(true) {
String readLine = console.readLine();
writer.write(new StringBuffer(readLine));
}
}
public Writer(final String filename){
this.queue = new LinkedBlockingDeque();
this.filename = filename;
}
public void write(StringBuffer buf) {
queue.add(buf);
}
public void init() {
ExecutorService single = Executors.newSingleThreadExecutor();
Runnable runnable = new Runnable() {
public void run() {
while(true) {
PrintWriter w = null;
try {
String toString = queue.take().toString();
w = new PrintWriter(new BufferedWriter(new
FileWriter(filename)), true);
w.println(toString);
} catch (Exception ex) {
Logger.getLogger(Writer.class.getName()).log(Level.
SEVERE, null, ex);
}
}
}
};
single.submit(runnable);
}
}
Reader.java
public class Reader {
private final BufferedReader br;
public Reader(final String filename) throws FileNotFoundException {
br = new BufferedReader(new FileReader(filename));
}
public String readLine() throws IOException {
return br.readLine();
}
public void close() {
try {
br.close();
} catch (IOException ex) {
Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null,
ex);
}
}
public static void main(String[] args) throws FileNotFoundException {
Reader reader = new Reader("pipe");
while(true) {
try {
String readLine = reader.readLine();
System.out.println("readLine = " + readLine);
} catch (IOException ex) {
reader.close();
break;
}
}
}
}
g*****g
发帖数: 34805
2
You probably should flush on writer.
n******1
发帖数: 3756
3
我知道了,一个比较低级的错误,
w = new PrintWriter(new BufferedWriter(new FileWriter(filename,true)), true
);
这里FileWriter需要加set append = true, 原来的true只是让PrintWriter auto
flush
我开始以为filereader是不是读的太快了,就算遇到空行也会往下读,实际上应该不会
,如果在print之前判断是否null,这样程序就演示的挺好了
谢谢了

【在 g*****g 的大作中提到】
: You probably should flush on writer.
1 (共1页)
进入Java版参与讨论
相关主题
请问同时执行几个bat文件的问题help! string format???
刚刚开始学习java,麻烦帮我看一下我哪里错了行吗?谢谢如何关闭打开的输入输出?
随机读一个大文件中的任意一行一个Java程序员的话(4)--续第一章
怎样截取网页
中多个

之间的内容?
请教一个问题,thanks!
新手求教 BufferedReader.readLine()BufferedWriter里的write()
怎么从键盘输入整数或float?how to use grep/sed to remove newlines? (转载)
JAVA文本文件读写问题[转载] smtp server in java?
从文件读入数据得到的是bytes新手请教怎样在Java里读文本文件中的内容
相关话题的讨论汇总
话题: string话题: import话题: writer话题: public话题: readline