我正在尝试创建一个在互联网上运行的多人游戏.问题是我正在尝试在流上获取输入,并且由于某种原因我无法使用一个套接字创建2个流,我将解释:
Socket s=new Socket("127.0.0.1",5001);
ObjectInputStream obj1=new ObjectInputStream(s.getInputStream());
ObjectInputStream obj2=new ObjectInputStream(s.getInputStream());
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么这段代码片段不起作用?
编辑:这是代码示例无法正常工作的另一个示例.
while (true) {
try {
objI = new ObjectInputStream(sock.getInputStream());
objO = new ObjectOutputStream(sock.getOutputStream());
}catch(Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:非常感谢您的回答.我试图刷新对象,但我不断收到此错误:
java.io.StreamCorruptedException: invalid stream header: 33740003
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at Proccess.run(Proccess.java:22)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud) 我正在写web下载器并遇到了这个奇怪的问题.示例代码:
int chunk;
var request = WebRequest.Create(uri) as HttpWebRequest;
using (WebResponse response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (Stream file = File.Create(filePath))
{
long byteReaded = 0;
long contentLength = response.ContentLength;
while (byteReaded < contentLength)
{
long bytesCountToRead = contentLength - byteReaded > chunk ? chunk : contentLength - byteReaded;
byte[] buffer = new byte[bytesCountToRead];
responseStream.Read(buffer, 0, buffer.Length);
file.Write(buffer, 0, buffer.Length);
byteReaded += bytesCountToRead;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:当'chunk'变量== 1或2个字节时,它没问题.但是当这个尺寸更大时 - 图像会受到干扰!我已经发现它具有下载速度(响应读取速度),因为当我设置较大的尺寸chunk并插入Thread.Sleep(time) …
我正在使用ZipOutputStream来创建ZIP文件.它运行正常,但Javadoc非常稀疏,所以我对ZipOutputStream的特性提出了疑问:
支持的最大文件大小是否有限制?ZIP中包含的文件和生成的ZIP文件本身?该size论点是long,但谁知道.(我们假设文件系统没有限制.)
什么是最小输入文件大小,证明使用DEFLATED方法是正确的?
我将始终使用ZipInputStream读取生成的ZIP文件.
我是Erlang世界的新手,我正在尝试为Twitter Stream API编写客户端.我正在使用httpc:request来发出POST请求而且我经常收到401错误,我显然是在做我发送请求的方式有问题......我看起来像这样:
fetch_data() ->
Method = post,
URL = "https://stream.twitter.com/1.1/statuses/filter.json",
Headers = "Authorization: OAuth oauth_consumer_key=\"XXX\", oauth_nonce=\"XXX\", oauth_signature=\"XXX%3D\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"XXX\", oauth_token=\"XXX-XXXXX\", oauth_version=\"1.0\"",
ContentType = "application/json",
Body = "{\"track\":\"keyword\"}",
HTTPOptions = [],
Options = [],
R = httpc:request(Method, {URL, Headers, ContentType, Body}, HTTPOptions, Options),
R.
Run Code Online (Sandbox Code Playgroud)
在这一点上,我确信签名没有问题,因为在尝试使用curl访问API时,相同的签名工作正常.我猜我的提出请求有一些问题.
我在请求中得到的响应如上所示:
{ok,{{"HTTP/1.1",401,"Unauthorized"},
[{"cache-control","must-revalidate,no-cache,no-store"},
{"connection","close"},
{"www-authenticate","Basic realm=\"Firehose\""},
{"content-length","1243"},
{"content-type","text/html"}],
"<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n<title>Error 401 Unauthorized</title>\n</head>\n<body>\n<h2>HTTP ERROR: 401</h2>\n<p>Problem accessing '/1.1/statuses/filter.json'. Reason:\n<pre> Unauthorized</pre>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n …Run Code Online (Sandbox Code Playgroud) 谷歌搜索并阅读了许多相关文章,但我并不真正理解如何使用bufferstream执行更好的方式与使用流上的读取方法一次读取相同数量的字节相比.根据我的理解,bufferstream一次从源流中读取许多字节数以节省往返次数.但这与使用read(byte [],index,count)有何不同,其中count =使用缓冲流读取的相同字节数.请帮我理解.
如果我使Stream对象打开一个文本文件OpenFileDialog,我应该在什么范围内关闭它?在同一范围内,我宣布它,或在其中一个ifs内(仅在正确打开的情况下关闭它)?
我给你留下代码,这样你就可以告诉我......
Stream arch_Usuarios;
OpenFileDialog openFileDialog_arch_Usuarios = new OpenFileDialog();
if (openFileDialog_arch_Usuarios.ShowDialog() == DialogResult.OK)
{
if ((arch_Usuarios = openFileDialog_arch_Usuarios.OpenFile()) != null)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
问候.
我有这个功能:
void check_open (ifstream& file)
{
if (not file.is_open())
{
cout << "Error." << endl;
exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
但是我只能传递ifstream参数,我怎么能让它接受ofstream参数呢?
我写的是C#windows store应用程序,我通过Sockets接收数据.我想知道,java DataInptStream.ReadFully()是否有任何C#quivalent方法.正如这里所写http://www.tutorialspoint.com/java/io/datainputstream_readfully.htm
方法从输入流中读取字节并将其分配到缓冲区数组b中.
它会阻塞,直到出现以下条件之一:输入数据的b.length个字节可用.C#中是否有任何等效方法?那个woul会等到字节长度可用吗?
当我将一些流写入新的内存流时,内存流的长度和容量最初都设置为0,并随着写入过程一起增长.但在某些时候,容量增长的速度要快于长度.
写操作完成后,我得到正确的长度(与原始输入流的长度相同),但容量更大.
这是对的吗?
它们不应该是一样的吗?
我找不到任何关于它的信息
我有以下代码我正在尝试编写单元测试:
// Grab all of the content.
var rawContent = new StringBuilder();
foreach (var fileInfo in response.Files)
{
using (var stream = fileInfo.VirtualFile.Open())
{
using (var streamReader = new StreamReader(stream))
{
rawContent.Append(streamReader.ReadToEnd());
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我已经模拟了Open()返回的Stream实例.这很简单.流对象也是一个MemoryStream顺便说一句.
但我不知道如何设置ReadToEnd()..以返回我的一些字符串内容.这是因为该StreamReader实例对此方法是私有的.
我想提供一个可以设置的属性.
例如.
public string AStreamReader { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后这样做..
// Grab all of the content.
var rawContent = new StringBuilder();
foreach (var fileInfo in response.Files)
{
using (var stream = fileInfo.VirtualFile.Open())
{
using (var …Run Code Online (Sandbox Code Playgroud)