从 Java Tutorial站点,我们知道InputStreamReader和OutputStreamWriter可以在字节和字符之间转换流.

InputStreamReader将从输入读取的字节转换为字符,而OutputStreamWriter将字符转换为字节以输出.

但什么时候应该使用这两个类?

我们逐字节输入/输出流输入/输出,逐字符输入/输出读/写输出/输出.

因此,当使用InputStreamReader从字节流中输入字符时,为什么不直接使用Reader类(或其子类)来读取字符?为什么不使用OutputStream而不是OutputStreamWriter直接写入字节?

编辑:
我什么时候需要使用InputStreamReader和OutputStreamWriter在字节和字符之间转换流?

编辑:
在哪种情况下我应该关心编码方案?

解决方法

要了解此目的,您需要牢记以下内容.在Java中,char和String用于表示为Unicode的“text”,而byte或byte []用于二进制数据.字节不是文本.字节可以表示编码文本…但是必须先解码它们才能在它们上使用char和String类型.

So when using InputStreamReader to input characters from byte stream,why not just use Reader class (or its sub classes) to read character directly?

(InputStreamReader是Reader的子类,所以它不是“要么……或者……”.)

InputStreamReader的目的是使InputStream适应Reader.此适配器负责将文本从字节解码为包含Unicode codepoints1的字符.

因此,当您有一个现有的InputStream(例如来自套接字)时,或者当您需要更多地控制编码方案的选择时,您将使用它. (重新使用后者 – 您可以使用FileReader直接打开文件,但是隐式使用文件的默认平台编码.通过使用FileInputStream – > InputStreamReader,您可以明确指定编码方案.)

Why not use OutputStream instead of OutputStreamWriter to write bytes directly?

它的编码又来了.如果要将文本写入OUtputStream,则必须根据某种编码方案对其进行编码;例如

os.write(str.getBytes("UTF-8"));

通过使用Writer,您可以将编码移动到不那么突兀的输出管道中,并且通常可以更有效地完成.

1 – 或更严格地说,是Unicode代码点的16位表示.

java – 我什么时候应该使用InputStreamReader和OutputStreamWriter?的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – 我可以使用AVCaptureSession将AAC流编码到内存吗?

    解决方法我最后向Apple寻求建议.似乎AVCaptureSession抓住了AAC硬件编码器,但只允许您使用它直接写入文件.您可以使用软件编码器,但您必须专门询问它而不是使用AudioConverterNew:同当然,软件编码器会占用cpu资源,但会完成工作.

  3. 在Xcode4中,你可以更改用于显示隐形字符的字符吗?

    我更喜欢VisualStudio显示隐形的方式……

  4. ios – 应用程序商店描述特殊字符

    是不是可以在AppStore描述中使用像星星这样的特殊字符了?我得到这个错误:描述不得包含标记语言.说明不得包含以下字符:★提前致谢:)解决方法仍然允许一些unicode字符.以下字符已经过测试并仍然有效:◆√至于现在他们工作正常,但苹果可以随时再次改变条件.

  5. ios – 将数组中的字符转换为整数

    即使我搜索了文档,我似乎无法弄清楚如何做到这一点.我试图弄清楚如何将数组中索引处的字符转换为整数.例如,假设我有一个名为“容器”的字符数组,我无法弄清楚该怎么做:谢谢您的帮助!解决方法Swift并不容易在原始和类型表示之间进行转换.这是一个在此期间应该有所帮助的扩展:这使您可以非常接近您想要的:对于遇到此问题的任何工程师,请参阅rdar://17494834

  6. ios – NSString cString已被弃用.什么是替代品?

    我有另一个新手问题.我写了一段代码,将Nsstring转换为NSMutableData,以模拟一个webService结果.但事实证明,cString已被弃用.你可以帮我更换吗?这是我的代码解决方法>从字符串获取原始字节.>获取UTF8编码中这些字节的长度.>使用dataWithBytes:length:方法创建NSData对象.

  7. ios – 创建一个包含n个空格或其他重复字符的字符串

    我想使用Swift使用n个空格进行字符串,但不使用for循环或手动如下所示:解决方法String已经有一个repeating:count:initializer就像Array(和其他采用RangeReplaceableIndexable协议的集合):所以你可以打电话:请注意,重复的参数是一个字符串,而不仅仅是一个字符,因此您可以重复整个序列:编辑:更改为Swift3语法,并删除了关于Swift1类

  8. ios – 如何使用Unicode十六进制值(UTF-16)在Swift中表达字符串

    我想在Swift中使用十六进制值编写一个Unicode字符串.我已经阅读了字符串和字符的documentation,所以我知道我可以使用特殊的Unicode字符直接在字符串如下:版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  9. ios4 – xcode上的奇怪错误:解析问题Unknow类型名称’plementation’

    在线上:Xcode4说:错误解析问题UnkNow类型名称’plementation’之后有很多解析问题.但该项目在iPhone上工作.我真的不知道是什么…id=27对于我自己的项目,我用TextWrangler打开了违规文件,并用“Western”编码重新保存它们,到目前为止,还没有从LLVM/Clang得到任何进一步的问题.

  10. ios – 如何删除/解码URL百分比编码?

    我想要一个url并将其转换成更易读的格式.例如我有以下链接:我拿走了不必要的部分,并留下了“Sándor_Font”作为Nsstring.有没有什么方式将它转换成“SándorFont”,而不必输出每一个特殊字符的组合并替换字符串的每个部分?为了演示如何使用它,我写了以下示例代码:最后我要标签说“SándorFont”不是“Sándor_Font”.谢谢!

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部