A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王舜民 于 2012-7-24 23:12 编辑

*
读取键盘录入
System.out:对应的是标准输出设备,控制台
System.in:对应的标准输入设备              ,键盘
*/
class  ReadIn
{
        public static void main(String[] args)
        {
                InputStream in = System.in;
                int by = in.read(0);

                System.out.println(by);
        }
}

其中in.read 是读取一个字节,要用int接收一下。我看了视频好几遍不知道为什么要用到int。在之前的视频 复制mp3中也有这么一段


:import java.io.*;
class  CopyMp3
{
        public static void copy_1() throws IOException
        {
                BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("c:\\0.mp3"));
                BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("c:\\1.mp3"));

                int by = 0;
                while((by=bufis.read())!=-1)
                {
                        bufos.write(by);
                }

                bufos.close();
                bufis.close();
        }

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
read()方法是从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1

点评

谢了  发表于 2012-7-24 00:10

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
则返回值 -1
回复 使用道具 举报
自定义字节流缓冲区:
class MyBufferedInputStream{
        private InputStream in;
        private byte[ ] buf=new byte[1024*4]
privete int pos=0,count=0
        MyBufferInputStream(InputStream in){
                this.in=in;
}
//一次读一个字节,从缓冲区(字节数组)获取
Public int myRead()  throws IOException{
        //通过in对象读取硬盘上数据,并存储到buf中
if(count==0){
            count=in.read(buf);
                if(count<0)
                        return -1;
pos=0//每次重新取pos都归零
byte b=buf[pos]
count--;
pos++
return b&255//8进制
}else if(count>0){
byte b=buf[pos]
count--;
pos++
return b&0xff//255的16进制表示形式
}
return -1
}
public void myClose()  throws IOException {
        in.close();
}
}
//为什么返回类型是int而不是byte?(避免-1的发生)
byte :-1 转成int:-1。Byte可以提升,可以往前补0,而不是补1,就不是-1了
11111111  --提升为一个int型,不还是-1吗?是-1的原因是因为在8个1前面补的是1导致的。那么只只要在前面补0,既可以保留原字节数据不变,又可以避免-1的出现。
怎么补0呢?
11111111  11111111  11111111  11111111
&00000000  00000000  00000000  1111111
---------------------------------------------------------
00000000  00000000  00000000  11111111
read方法在提升,write方法在强转(写出去的还是有效数据)

点评

3q,我想问的就是这个  发表于 2012-7-24 09:42

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
聂峰 发表于 2012-7-23 23:46
自定义字节流缓冲区:
class MyBufferedInputStream{
        private InputStream in;

谢谢啊!apk文档中可以查到吗?
回复 使用道具 举报
read()方法的返回值是int,如果可以读到数据,那么返回为正数,读不到就是-1了,这是api
回复 使用道具 举报
郭凯敏 发表于 2012-7-24 00:49
read()方法的返回值是int,如果可以读到数据,那么返回为正数,读不到就是-1了,这是api
...

恩。我自己脑子糊了。谢谢。已经找到了,这讲过好几次了,我没记牢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马