java输入流读取不完全

fdx2calv  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(290)

我一直在开发javaweb服务器,我已经编写了大部分内容,现在我正在开发tls和https。问题是,我从sslsocket获取的输入流读取的数据不完整。例如,如果数据的长度是100000字节,那么它将只读取16000字节,甚至输入流的available()方法也会返回错误的字节数。我试图用readallbytes()方法或readfully()方法(datainputstream)读取所有字节,但它们无法正常工作,因为它们将阻塞并等待接收更多字节(我在处理http时使用了available()方法来退出循环,它工作正常,但使用https时返回的字节数错误)。这是我创建服务器套接字的地方:

System.setProperty("javax.net.ssl.keyStore",SSLConfigs.getJKS());
System.setProperty("javax.net.ssl.keyStorePassword", SSLConfigs.getPass());
SSLServerSocketFactory sslServerSocketfactory = (SSLServerSocketFactory) 
SSLServerSocketFactory.getDefault();
SSLServerSocket sslServerSocket = (SSLServerSocket) 
sslServerSocketfactory.createServerSocket(Configs.getWSPort());
while (true) new HttpsHandler((SSLSocket) sslServerSocket.accept());

这是httpshandler.java(这是我有问题的部分)。我将请求缓存在一个名为tempfile的文件中,并对其进行进一步处理:

FileOutputStream fw =  new FileOutputStream(tempFile,true);
fw.write(in.read());
while(in.available() > 0) {
fw.write(in.read());
}

如果有问题的话,当我编写http部分时,我必须从输入流缓冲区开始读取,这样available()方法就不会返回0,我在这里做同样的事情。所以基本上,问题是我在这里编写的代码没有完全读取数据,当我进行一些调试时,我发现available()方法返回的字节数少于数据的实际大小。我不知道如何解决这个问题,我将非常感谢你的帮助(抱歉,时间太长了!)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题