会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 134311个问题

老师,这里使用BufferedInputStream和BufferedOutputStream定义的处理流,是不是与自定义byte[]数组缓冲区然后read(byte[] b)并不一样?


我的理解:

1)处理流仍然是一个字节一个字节从数据源中读取数据,只是将这些字节缓存在处理流定义的字节数组中,之后等满了以后(达到8192个字节)再读入到程序中;

2)而自定义的缓冲区是一次直接从数据源中读取多个字节(比如定义的1024个字节数组)到程序中。


处理小文件的时候,自定义的会不会效率更高一下?

处理大文件的时候使用那个更好一些?

两个结合在一块使用适用吗?(比如第二段代码中的适用)


第一段代码:

package cn.ljp;

import java.io.*;

public class TestBufferedInputStream02 {
    public static void main(String[] args) {
        // 1) 定义字节流和处理流
        InputStream fis = null;
        InputStream fib = null;
        OutputStream fos = null;
        OutputStream fob = null;
        try{
            fis = new FileInputStream("f:/a.png");
            fib = new BufferedInputStream(fis);
            fos = new FileOutputStream("f:/aa.png");
            fob = new BufferedOutputStream(fos);
            int emp = 0;
            long start = System.currentTimeMillis();
            while((emp = fib.read()) != -1){
                System.out.println(emp);
                fob.write(emp);
            }
            fob.flush();
            long stop = System.currentTimeMillis();
            System.out.println("花费时间" + (stop - start) + "毫秒");
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try{
                if(fib != null)
                    fib.close();
                if(fis != null)
                    fis.close();
                if(fob != null)
                    fob.close();
                if(fos != null)
                    fos.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
}

第二段代码:

package cn.ljp;

import java.io.*;

public class TestBufferedInputStream {
    public static void main(String[] args) {
        // 1) 定义字节流和处理流
        InputStream fis = null;
        InputStream fib = null;
        OutputStream fos = null;
        OutputStream fob = null;
        try{
            fis = new FileInputStream("f:/a.png");
            fib = new BufferedInputStream(fis);
            fos = new FileOutputStream("f:/aa.png");
            fob = new BufferedOutputStream(fos);
            byte[] buff = new byte[1204];
            int emp = 0;
            long start = System.currentTimeMillis();
            while((emp = fib.read(buff)) != -1){
                System.out.println(emp);
                fob.write(buff,0,emp);
            }
            fob.flush();
            long stop = System.currentTimeMillis();
            System.out.println("花费时间" + (stop - start) + "毫秒");
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try{
                if(fib != null)
                    fib.close();
                if(fis != null)
                    fis.close();
                if(fob != null)
                    fob.close();
                if(fos != null)
                    fos.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    }
}


JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 2416楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2417楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/常用类 2418楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2419楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2420楼

http_server02.zip

视频里报异常后再xml里面配置了“favicon”就没问题了,怎么我就报错了,把视频代码搬进去也是这样

image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2422楼

src.zip

求老师解决,真的不知道哪里出问题,java.lang.ClassNotFoundException:image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2423楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2425楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 2426楼

老师,我这个一直报字符串越界异常,在38行这里,实在看不出来哪里出错了

package com.bjsxt.server;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 用于启动和停止服务
 */
public class Server { //服务器,用于启动和停止
    private ServerSocket server; // 服务器端

    public static void main(String[] args) {
        Server server = new Server(); // 创建服务器对象
        server.start();

    }
    public void start(){  //启动方法
        this.start(11111); //调用本类中的带有参数的启动方法
    }
    public void start(int port){ //启动服务器的方法
        try {
            server = new ServerSocket(port); //传给的是多少,端口值就是多少
            this.receive(); //调用接收请求信息的方法
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void receive() {
        //(1)监听
        try {
            Socket client = server.accept();
            InputStream is = client.getInputStream();
            byte [] buf = new byte[20480]; //写一个大一点的缓冲区
            int len = is.read(buf); //读取到缓冲区来
            System.out.println(new String(buf,0,len)); //看一下读到的用户的请求是什么
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void stop(){ //停止服务器的方法

    }
}

image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2427楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2428楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2429楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2430楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637