黑马程序员技术交流社区
标题:
为什么接受的是IOException抛出的是RuntimeException()?
[打印本页]
作者:
潜伏
时间:
2013-12-1 22:57
标题:
为什么接受的是IOException抛出的是RuntimeException()?
/*
要求:使用管道流
思路:
1,管道流有两个流,一个是PipeOutputStream一个是PipeInputstream。要明确输出流输到输入流中,或者说写入流写到读取流
2,两个流必须关联起来
3,同时管道流中的输出流和输入流是必须保证是两个线程,以防止死锁,因为,当读取流没有读导数据就会发生死锁。所以必须多线程
4,创建多线程的方法是,必须建立一个类同时去实现runnable方法,把要执行的程序写在这个类中
5,在主函数中开启线程。new Thread(对象)。start
*/
import java.io.*;
import java.util.*;
class PipeDemo
{
public static void main(String[] args) throws IOException
{
PipedOutputStream os=new PipedOutputStream();
PipedInputStream is=new PipedInputStream();
os.connect(is);
Write t=new Write(os);
Read r=new Read(is);
new Thread(t).start();
new Thread(r).start();
}
}
class Write implements Runnable
{
private PipedOutputStream os;//对象一建立就必须有一个管道输出流,方便在里面操作
Write(PipedOutputStream os)//给对象初始化用,从而传进来要操作的管道输出流
{
this.os=os;
}
public void run()
{
try
{
os.write("hahalail".getBytes());//必须写入字节
os.close();
}
catch (IOException e)
{
throw new RuntimeException();//为什么抛出的是RuntimeException()???????????????????????????
}
}
}
class Read implements Runnable
{
private PipedInputStream in;
Read(PipedInputStream in)
{
this.in=in;
}
public void run()
{
try
{
byte[] arr=new byte[1024];
int num=in.read(arr);
String s=new String(arr,0,num);//string的这种方法的记住,在创建对象的时候传入一个数组,可以根据指定将部分转换为字符串
in.close();
System.out.println(s);
}
catch (IOException e)
{
throw new RuntimeException()
}
}
}
作者:
hurryup
时间:
2013-12-1 23:17
可能是bug。有时候网上写的都是错的。
作者:
Clare0621
时间:
2013-12-1 23:50
只是个简单处理罢了,因为如果什么字节都没写入,程序执行也没有意义,可以直接抛RuntimeException终止程序。
作者:
依然
时间:
2013-12-2 00:27
不知道作者为什么这么写,也许是个人的习惯吧,但觉得代码又一些不严谨,两个线程中对资源的关闭最好写在finally中吧,这样才能抱着资源在异常退出时候也能关闭。
作者:
long362144768
时间:
2013-12-2 01:20
线程的run函数不能抛出异常,如果你抛出除了RunnableException异常以外,编译其无法通过,只有RunnableException不需要在方法上throws ,所以是最佳选择
作者:
简★零度
时间:
2013-12-5 22:49
下次问题解决了就把类型改成提问结束!谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2