java字节流

import java.io.IOException;
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());
}
}
}

你可能感兴趣的:(Java综合)