PrintStream和PrintWriter

这几天一直在学习socket,今天在网上看到一段代码(大致意思是客户端向服务器端发送数据之后,服务器会将原数据加上服务器标志后返回),就大概的照着做了一遍,结果发现出错了,经过一番的纠结之后,发现将所有使用PrintWriter的地方换为PrintStream即可,下面详细说说吧。
因为我最开始学习的基础时,socket发送数据用的都是PrintWriter,因此尽管这个代码的作者实际使用的是PrintStream,但我感觉是一样的并且不能否定之前学的不是,然后就继续使用着PrintWriter。结果,毛病就来啦。。客户端不管怎样操作,服务器端都没有任何反应,其实我刚开始也没想到这点,是对比处理了很久都没有成功,最后无奈看到这个,才想着换过来试试的(其实当时心里想的还是肯定没用,纯粹就是试试),结果居然成功了。。。

然后上百度到处搜索PrintStream和PrintWriter的区别,有一言概之的也有长篇大论的,看了老半天,其实还是不太了解,所以最后无奈得出感觉最正确的结论:PrintStream用于对字节的处理,且可以自动flush,而PrintWriter则用于对字符的处理(虽然我在最简单的字节流处理用它也没有错。。。)


顺便贴上我在api中查到的描述吧:


PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。
PrintWriter:向文本输出流打印对象的格式化表示形式。此类实现在 PrintStream 中的所有 print 方法。
它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。 与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符。 
此类中的方法不会抛出 I/O 异常,尽管其某些构造方法可能抛出异常。客户端可能会查询调用 checkError() 是否出现错误。

PrintStream为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。它还提供其他两项功能。与其他输出流不同,PrintStream 永远不会抛出 IOException;而是,异常情况仅设置可通过checkError方法测试的内部标志。另外,为了自动刷新,可以创建一个 PrintStream;这意味着可在写入 byte 数组之后自动调用 flush 方法,可调用其中一个 println 方法,或写入一个换行符或字节 ('\n')。  

PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值