最近在看深入理解计算机系统,本书说到:计算机文件,不过就是m个字节序列。读写文件的时候,就是将字节序列从存储器其中取出来或者写入到文件(也就是这个序列中)。既然这样,为什么java还要提供那么多的字节流:FileInputStream,FileOutputStream,DataInputStream和DataOutputStream什么的,还有很多,要这些干嘛?一个字节流不就搞定了?
请懂得底层实现的大神说一下,或者从对字节流的封装角度说一下,不要单纯的概念粘贴,谢谢。
你先弄懂什么是编码。最好去了解下ASCII、UNICODE以及UTF-8这三种
底层的实现机制不同啊,文件流底层是文件的读写,网络流是网络数据的接收,压缩流底层是压缩解压缩算法。
这样处理关键在于解决不同编码的问题,比如中文字符采用unicode编码,一个中文字符占用两个字节,如果这个时候用字节流来输入的话,默认一个字节一个字节地识别,那么中文字符就全部变成乱码了,因此只能使用字符流输入
多种类型的字节流,主要是为了更好,更快的读写。比如最明显的是BufferedInputStream,是对InputStream的封装加强。对于它的存在意义,比如说你去喝一杯水,你是一滴一滴的喝,还是盛到一杯水再喝?