浏览 1537 次
锁定老帖子 主题:java字节流
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-23
import java.lang.*; /** * inputStream:输入字节流。 对应的则是,操作系统读取输入流,例如从键盘接收,从文件系统读取, * 读取后抽象为inputStream类,而这个类的提供相应的读取方法,从里面读出二进制的 * 字节流。也可以认为inputStream是硬件的抽象层,接收操作系统发送的二进制流。 * 在二进制流(inputStream)的基础上,可以具体为File文件流,即对应的inputStream * 是从文件系统中读取的,此时在构建Stream对象时,可以输入文件路径和文件名,直接 * 构建这个Stream流。并设置文件相关的特性。 * OutputStream:表示输出字节流。和InputStream相反,是将二进制的流,发送给操作系统。 * 需要注意的是:不管是inputstream 还是outputstream,操作的对象都是字节流,即二进制的串, * 对应到系统也就是byte[],字节数组,因为byte类型,对应一个文件系统一个字节,即8位。 * 也就是说byte[],实际上对应的就是硬盘上的二进制(怎么称呼呢?字符串不合适,流也不合适) * 而这个是通过InputStream和OutputSteam对象和操作系统交互获得的。在jdk源码中,InputStream的 * read()方法是抽象方法,有其相关的子类实现,例如FileInputStream类的read方法: * ** * * Reads a byte of data from this input stream. This method blocks * * if no input is yet available. * * * * @return the next byte of data, or <code>-1</code> if the end of the * * file is reached. * * @exception IOException if an I/O error occurs. * * * public native int read() throws IOException; * 调用的native方法。 * * * 也就是说inputsteam 和outputstream最终得到就是二进制字节流,以byte[]数组在java中体现。 * 网络传输,也是通过字节流进行传输的。 * 字节流的转换(此种仅讨论字符)则是通过字符集实现的,即String类,将二进制字节流根据 * 相关的字符集,转换为可识别的字符(当然是在字符集正确的情况下)。 * 而字符和字节流的对应关系,则是字符集决定的。 */ public class KeyBoardValue { public static void main(String[] args) { int readData=0; try { System.out.println("请敲击键盘键:"); while(true){ // read 读入的是一个字节,范围-128 ~ 127 之间的数字。一个字节对应二进制8位。 // 实际上这就是数字化的源头,所有的图像、图形、音频、视频,最终都以byte(8位) // 为单位进行保存和读取,然后根据相关规范和标准进行转换(例如:对于GBK字符集, // 定义一般情况下,2个字节对应一个汉字,实际上字符集,就对应了相应的显示符号;), // 这个转换后的符号,外部设备能够识别, // 识别的符号或者图形或其他形式,例如:音箱识别声音,显示器识别符号和图形。 // 注意:对组合键是不识别的。 readData=System.in.read(); System.out.println("输入键盘字符为:"+(char)readData + ";对应10进制:"+readData+" 对应16进制:" +Integer.toHexString(readData)); } } catch (IOException e) { System.out.println(e.toString()); } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |