本帖最后由 weidu23 于 2013-12-05 22:55:34 编辑

解决方案 »

  1.   


    果然 !
    ---------
    另外,我多问一个问题,望指点下:
    假设BufferedWriter bw;
    bw = new  BufferedWriter(
    new OutputStreamWriter(
    new FileOutputStream(fileName)
    )
    );
    有这样一个bw,那么bw.close时,
    是关闭BufferedWriter
    还是关闭BufferedWriter以及new OutputStreamWriter、new FileOutputStream(fileName)
    呢?
    想请教下 ...
      

  2.   

    的确忘了!
    另外,我还想问一个问题,有时间望赐教:
    ---------
    假定有这么一个函数:inStream = cliengSocket.getInputStream();
    BufferedReader br = new  BufferedReader(
                    new InputStreamWriter(
                            inStream
                    )
            );
    BufferedWriter bw;
            bw = new  BufferedWriter(
                    new OutputStreamWriter(
                            new FileOutputStream("C:/.../position.stuff");
                    )
            );
    String line = null ;
    while( null != (line = br.readLine()) ){
            bw.write(line);
    }那么,关闭时,是先关闭 bw还是先关闭br,还是先关闭inStream呢?
    我对于关闭的顺序基本上没有概念,希望朋友你能否指教下?
      

  3.   

    1、这样啊,也就是说,是先关闭最外面的,在一次次往里面关闭 ?
    2、比如刚刚的bw和br,里面嵌套了其他的匿名IO,
    那么bw.close()、br.close()时,
    是关闭bw、br本身?
    还是关闭bw\br以及传递给他们的匿名IO流呢?
      

  4.   


    这样啊!
    那么最后疑问:
    BufferedWriter  bw = new  BufferedWriter(new OutputStreamWriter( new FileOutputStream(fileName)));
    那么bw.close()时,
    是关闭bw本身?
    还是关闭bw以及传递给他们的匿名IO流呢?
      

  5.   


    这样啊!
    那么最后疑问:
    BufferedWriter  bw = new  BufferedWriter(new OutputStreamWriter( new FileOutputStream(fileName)));
    那么bw.close()时,
    是关闭bw本身?
    还是关闭bw以及传递给他们的匿名IO流呢?
    哥们,这个叫做 “过滤流链” ,自己去查查吧,bw关闭时,所有的过滤流中都被关闭了!
      

  6.   

    每个流执行close关闭时,直接掉用你构造方法赋给他的基础流的关闭close方法,层层调用,最后关闭最基础的字节流。
      

  7.   


    好奇心害死人的我,今天还想蹭一个问题,望指教:在我看的一个blog里面,这样写道:
    客户向服务器发送的请求是一个有特定格式的ASCII消息,其语法规则为: 
      < Method > < URL > < HTTP Version > <\r\n>  
      { <Header>:<Value> <\r\n>}  
      <\r\n>  
      { Entity Body } 客户发送应答消息.与请求消息一样,应答消息的语法规则为:   < HTTP Version> <Status Code> [<Message>]<\r\n>  
      { <Header>:<Value> <\r\n> }   
      <\r\n>  
      { Entity Body } 
    于是,按照他的方式,我这样模仿这写:
    PrintWriter out = new ...... ;
    out.println(< HTTP Version> <Status Code> [<Message>]<\r\n>);
    out.println({ <Header>:<Value> <\r\n> } );
    out.println(<\r\n> );
    out.println({ html Body }  );
    然后设定好端口12345,当浏览器的访问:http://localhost:12345时,真的可以打印数据了!
    ---------------------------------然而我在群里问别人:每一次Server发送数据给浏览器只能发送一次,也就是每发送一次就等于一次http://localhost:12345?param=...,为什么POST还可以发送多行文字呢?群里有人说什么根据http的结构是“--------”作为分隔符?我完全乱了,不知道是我看的文章正确,还是群里的说的正确?
      

  8.   


    明白了,我在楼上12楼还有一个小问题,不知能否指点下?
    我没明白你最后几句话的意思,POST是客户端与服务器用http通信的提交数据方式,http协议里,post提交的数据是在http content里面的,能一次传送很多数据,与post对应的是get方式提交数据,get提交的数据是直接写在url后面键值对的形式附上的,与请求地址用问号隔开。
      

  9.   


    我的意思是,我看那blog后,发现:先写HTTP Vesion 再写Header : Value,然后就可以写out.println()在
    浏览器打印html了。但是,每一次点击,都是一次<form>,也就是说,就算我要上传文件,肯定也是<input type="file">... 。
    form里面POST传输。
    但是每点击一次也就传输一次啊,一次就一行字符串,哪来的多行传输啊?
    ----------
    群里说可以,说什么“--------”就是分隔符。
    ----------
    我不明缘由,望指教!
      

  10.   


    好奇心害死人的我,今天还想蹭一个问题,望指教:在我看的一个blog里面,这样写道:
    客户向服务器发送的请求是一个有特定格式的ASCII消息,其语法规则为: 
      < Method > < URL > < HTTP Version > <\r\n>  
      { <Header>:<Value> <\r\n>}  
      <\r\n>  
      { Entity Body } 客户发送应答消息.与请求消息一样,应答消息的语法规则为:   < HTTP Version> <Status Code> [<Message>]<\r\n>  
      { <Header>:<Value> <\r\n> }   
      <\r\n>  
      { Entity Body } 
    于是,按照他的方式,我这样模仿这写:
    PrintWriter out = new ...... ;
    out.println(< HTTP Version> <Status Code> [<Message>]<\r\n>);
    out.println({ <Header>:<Value> <\r\n> } );
    out.println(<\r\n> );
    out.println({ html Body }  );
    然后设定好端口12345,当浏览器的访问:http://localhost:12345时,真的可以打印数据了!
    ---------------------------------然而我在群里问别人:每一次Server发送数据给浏览器只能发送一次,也就是每发送一次就等于一次http://localhost:12345?param=...,为什么POST还可以发送多行文字呢?群里有人说什么根据http的结构是“--------”作为分隔符?我完全乱了,不知道是我看的文章正确,还是群里的说的正确?
    我晕,你这个是Socket吗?明明是Java Web里面的东西,
      

  11.   

    使用Socket编程,还需要什么http://localhost 吗? 扯淡! StringBuffer就是StringBuffer,Socket就用Socket,干嘛东扯扯西扯扯的!
      

  12.   

    额,我来解释下:
    1、StringBuffer是我原始的问题,是因为忘了new StringBuffer()才提了问。
    2、JavaSE和JavaEE不应该分得那么清楚,楼上同志你可以试试,http://localhost等价于socket.connect("127.0.0.1",80);
    3、正是因为基于问题2,所以我提出了问题,我自己模仿网络上资料写Server作为服务器,接收浏览器来自localhost的请求,并且按照网上指导的http协议方式进行通讯,但由此碰到了问题:
    每一次浏览器的点击“上传”,都等价于向我自己的server发送了一个Stream,然后,我用server从InputStream来接收。但问题是,每一次点击都是对Server的一次方法,那么,要发送多行文件(这是针对打文件),岂不是要点击多次?但是网上JSP、Struts2等都支持多行文件的发送,所以我才提出问题在12楼提出的问题。谢谢