当StringBuffer碰到Socket,我出错了,菜鸟求教 本帖最后由 weidu23 于 2013-12-05 22:55:34 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 果然 !---------另外,我多问一个问题,望指点下:假设BufferedWriter bw; bw = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(fileName) ) );有这样一个bw,那么bw.close时,是关闭BufferedWriter还是关闭BufferedWriter以及new OutputStreamWriter、new FileOutputStream(fileName)呢?想请教下 ... 的确忘了!另外,我还想问一个问题,有时间望赐教:---------假定有这么一个函数: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呢?我对于关闭的顺序基本上没有概念,希望朋友你能否指教下? 1、这样啊,也就是说,是先关闭最外面的,在一次次往里面关闭 ?2、比如刚刚的bw和br,里面嵌套了其他的匿名IO,那么bw.close()、br.close()时,是关闭bw、br本身?还是关闭bw\br以及传递给他们的匿名IO流呢? 这样啊!那么最后疑问:BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(fileName)));那么bw.close()时,是关闭bw本身?还是关闭bw以及传递给他们的匿名IO流呢? 这样啊!那么最后疑问:BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(fileName)));那么bw.close()时,是关闭bw本身?还是关闭bw以及传递给他们的匿名IO流呢?哥们,这个叫做 “过滤流链” ,自己去查查吧,bw关闭时,所有的过滤流中都被关闭了! 每个流执行close关闭时,直接掉用你构造方法赋给他的基础流的关闭close方法,层层调用,最后关闭最基础的字节流。 好奇心害死人的我,今天还想蹭一个问题,望指教:在我看的一个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的结构是“--------”作为分隔符?我完全乱了,不知道是我看的文章正确,还是群里的说的正确? 明白了,我在楼上12楼还有一个小问题,不知能否指点下?我没明白你最后几句话的意思,POST是客户端与服务器用http通信的提交数据方式,http协议里,post提交的数据是在http content里面的,能一次传送很多数据,与post对应的是get方式提交数据,get提交的数据是直接写在url后面键值对的形式附上的,与请求地址用问号隔开。 我的意思是,我看那blog后,发现:先写HTTP Vesion 再写Header : Value,然后就可以写out.println()在浏览器打印html了。但是,每一次点击,都是一次<form>,也就是说,就算我要上传文件,肯定也是<input type="file">... 。form里面POST传输。但是每点击一次也就传输一次啊,一次就一行字符串,哪来的多行传输啊?----------群里说可以,说什么“--------”就是分隔符。----------我不明缘由,望指教! 好奇心害死人的我,今天还想蹭一个问题,望指教:在我看的一个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里面的东西, 使用Socket编程,还需要什么http://localhost 吗? 扯淡! StringBuffer就是StringBuffer,Socket就用Socket,干嘛东扯扯西扯扯的! 额,我来解释下: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楼提出的问题。谢谢 发一个昨天的上机面试题:大数相加 下载管理类出现异常?如何解决!谢谢 急求!!<FORM id=FORM1 name=fm_login action="j_security_check" method=post> jfreechart横坐标原点问题 请问如何在一个List最开始插入一个元素,其他元素一次向后移动一位? 请问这道题错在哪里? 有关多个文件编译和package 关于版面管理的问题 求助!java读取两个txt文件,并分析统计里面的数据后输出 jdk装上后就是不能运行,总是找不到 class文件 关于A<? extends B> p,请指点 循环语句报错
果然 !
---------
另外,我多问一个问题,望指点下:
假设BufferedWriter bw;
bw = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(fileName)
)
);
有这样一个bw,那么bw.close时,
是关闭BufferedWriter
还是关闭BufferedWriter以及new OutputStreamWriter、new FileOutputStream(fileName)
呢?
想请教下 ...
另外,我还想问一个问题,有时间望赐教:
---------
假定有这么一个函数: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呢?
我对于关闭的顺序基本上没有概念,希望朋友你能否指教下?
2、比如刚刚的bw和br,里面嵌套了其他的匿名IO,
那么bw.close()、br.close()时,
是关闭bw、br本身?
还是关闭bw\br以及传递给他们的匿名IO流呢?
这样啊!
那么最后疑问:
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(fileName)));
那么bw.close()时,
是关闭bw本身?
还是关闭bw以及传递给他们的匿名IO流呢?
这样啊!
那么最后疑问:
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(fileName)));
那么bw.close()时,
是关闭bw本身?
还是关闭bw以及传递给他们的匿名IO流呢?
哥们,这个叫做 “过滤流链” ,自己去查查吧,bw关闭时,所有的过滤流中都被关闭了!
好奇心害死人的我,今天还想蹭一个问题,望指教:在我看的一个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的结构是“--------”作为分隔符?我完全乱了,不知道是我看的文章正确,还是群里的说的正确?
明白了,我在楼上12楼还有一个小问题,不知能否指点下?
我没明白你最后几句话的意思,POST是客户端与服务器用http通信的提交数据方式,http协议里,post提交的数据是在http content里面的,能一次传送很多数据,与post对应的是get方式提交数据,get提交的数据是直接写在url后面键值对的形式附上的,与请求地址用问号隔开。
我的意思是,我看那blog后,发现:先写HTTP Vesion 再写Header : Value,然后就可以写out.println()在
浏览器打印html了。但是,每一次点击,都是一次<form>,也就是说,就算我要上传文件,肯定也是<input type="file">... 。
form里面POST传输。
但是每点击一次也就传输一次啊,一次就一行字符串,哪来的多行传输啊?
----------
群里说可以,说什么“--------”就是分隔符。
----------
我不明缘由,望指教!
好奇心害死人的我,今天还想蹭一个问题,望指教:在我看的一个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里面的东西,
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楼提出的问题。谢谢