源代码例子:
//首先生成一个 ByteArrayOutputStream 对象
ByteArrayOutputStream baosXML = new ByteArrayOutputStream();
//然后再利用 ByteArrayOutputStream 生成 PrintWriter 对象
PrintWriter xmlWriter = new PrintWriter(baosXML);
//然后有如下调用,难道不能直接调用sql2xml.setXMLWriter(baosXML);
sql2xml.setXMLWriter(xmlWriter);
//下面函数的参数是String类型 所以需要调用baosXML.toString()一下
String html = genHTML(baosXML.toString(),....);
// xml == baoXML.toString() ,然后在使用xml时又要转化成stringReader对象
//然后由生成StreamSource
//难道ByteArrayOutputStream对象就不行吗,非要这样把类型换来换去!
String genHTML{
new StreamSource(new StringReader(xml)),
return html;
}
我想问的就是java 的io对象
ByteArrayOutputStream
PrintWriter
StringReader
StreamSource
有什么不同,为什么使用时非要变来变去?还有String 对象作为函数参数传递时
是否要拷贝对象本身?
高手救命!
java 的IO是根据流的性质分两类(字符流,字节流),再根据流的源头,目的地的不同而继承处各种不同的子类,都是为了编程方便,哪个方便用哪个吧
String对象作为参数时不copy对象本身,只是copy一个引用,可以说是句柄,指针
建议找本讲解java.io库的书看看,
这个库主要用的装饰模式Decorator,
主要就是reader/writer和outputStream/inputstream这样成对出现的类
装饰模式意思就是通过装饰把一个类转换成另外一个类
比如ByteArrayOutputStream(Stream)这样就是把某种对象的Stream,比如String
或者Char等等,装饰成一个ByteArray的对象
其他的类似