我碰到的问题是这样的:要从网络上读取信息,对方发来的是序列化过后的对象,我要用ObjectInputStream来读取,但是我发现ObjectInputStream是非阻塞式的。这样我就不知道对方什么时候发过来,所以我不得不用一个for(;;)循环来读取,但是这样的话CPU占用100%。请问有什么办法可以解决这个问题?
解决方案 »
- 又出问题了,还是坦克游戏
- 求一算法的实现
- JAVA的开发环境是什么?
- 关于JDK配置正常,程序仍不能运行?
- 什么是向上转型,什么是向下转型,看我这个例子分析的对不对???
- 关于Java swing中文本框的一个奇怪问题
- 100分请教高手:如何把两个excel文件的内容合并成一个excel文件,(用POI)
- 抛出java.security.InvalidKeyException: Illegal key size or default parameters 怎么修改
- [祝Java版的朋友们国庆节快乐]
- mm.mysql-2.0.14-bin.jar应该怎么使用阿??我放到java_home/jre/lib/ext不行,放到tomcat/lib也不行,直接在classpath写出路径也不行??
- 这段代码错在哪?(100分)
- 请JAVA SWING高手进来看一下。。还有小蚊子同学有空的话也帮看一下 @_@~
netAdapter.javaclass netAdapter
{
BufferedInputStream input = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());
ObjectInputStream oin = new ObjectInputStream(input);
ObjectOutputStream oout = new ObjectOutputStream(output); public Message receive()
{
Message message = null;
try
{
message = (Content)(oin.readObject());
}
catch(ClassNotFoundException cnfe)
{
System.out.println("class Content not Found");
throw cnfe;
}
catch(EOFException eofe)
{
System.out.println("end of stream");
throw eofe;
}
catch(IOException ioe)
{
System.out.println("I/O err in receive() - " + ioe);
throw ioe;
}
}
} main.java public static void main(String[] args)
{
Runnable netRunnable = new Runnable()
{
public void run()
{
Message message;
netAdapter nadapter = new netAdapter();
for(;;)
{
try{
if(nadapter != null)
{
message = null;
message = nadapter.receive();
message.handle();
}
}
catch (ClassNotFoundException e)
{}
catch (IOException e)
{}
}
}
}; Thread netThread = new Thread(client.netRunnable);
netThread.start();
.....//do something in user interface
}
{}
catch (IOException e)
{} 把e.printStackTrace();加上看看吧