当我从中读取源代码时java.io.BufferedInputStream.getInIfOpen(),我很困惑为什么它编写这样的代码:
/**
* Check to make sure that underlying input stream has not been
* nulled out due to close; if not return it;
*/
private InputStream getInIfOpen() throws IOException {
InputStream input = in;
if (input == null)
throw new IOException("Stream closed");
return input;
}
Run Code Online (Sandbox Code Playgroud)
为什么它使用别名而不是in直接使用字段变量,如下所示:
/**
* Check to make sure that underlying input stream has not been
* nulled out due to close; if not return it;
*/
private InputStream getInIfOpen() throws IOException …Run Code Online (Sandbox Code Playgroud) 我在我的Android应用程序中使用OKHTTP客户端进行网络连接.
此示例显示如何上载二进制文件.我想知道如何使用OKHTTP客户端获取二进制文件下载的输入流.
以下是该示例的列表:
public class InputStreamRequestBody extends RequestBody {
private InputStream inputStream;
private MediaType mediaType;
public static RequestBody create(final MediaType mediaType,
final InputStream inputStream) {
return new InputStreamRequestBody(inputStream, mediaType);
}
private InputStreamRequestBody(InputStream inputStream, MediaType mediaType) {
this.inputStream = inputStream;
this.mediaType = mediaType;
}
@Override
public MediaType contentType() {
return mediaType;
}
@Override
public long contentLength() {
try {
return inputStream.available();
} catch (IOException e) {
return 0;
}
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
Source source …Run Code Online (Sandbox Code Playgroud) 让我在这篇文章前面加上一点谨慎.在Java方面,我是一个初学者.我已经开启和关闭了PHP一段时间,但我已经准备好制作一个桌面应用程序,所以我决定使用Java,原因有很多.
我正在处理的应用程序处于开始阶段(少于5个类),我需要从本地文件中读取字节.通常,文件目前小于512kB(但将来可能会变大).目前,我使用a FileInputStream将文件读入三个字节数组,完全满足我的要求.但是,我已经看到了一个BufferedInputStream提到的,并且想知道我目前这样做的方式是最好的,还是我应该使用一个BufferedInputStream.
我做了一些研究,并在Stack Overflow上阅读了一些问题,但是我仍然遇到麻烦,了解何时使用而不使用的最佳情况BufferedInputStream.在我的情况下,我读取字节的第一个数组只有几个字节(小于20).如果我收到的数据在这些字节中是好的,那么我将文件的其余部分读入另外两个不同大小的字节数组.
我也听过很多人提到分析,看看哪个在每个特定情况下哪个更有效,但是,我没有剖析经验,我不确定从哪里开始.我也会喜欢这方面的一些建议.
对于这么长的帖子我很抱歉,但我真的想学习并理解做这些事情的最佳方法.我总是习惯于第二次猜测我的决定,所以我会喜欢一些反馈.谢谢!
应该很简单:我有一个InputStream,我想要查看(不读取)前两个字节,即我希望在我偷看后,InputStream的"当前位置"为0.什么是最好最安全的方法?
答案 - 正如我所怀疑的,解决方案是将其包装在提供可标记性的BufferedInputStream中.谢谢Rasmus.
以下两种缓冲方法之间有什么不同(如果有的话)?
Reader r1 = new BufferedReader(new InputStreamReader(in, "UTF-8"), bufferSize);
Reader r2 = new InputStreamReader(new BufferedInputStream(in, bufferSize), "UTF-8");
Run Code Online (Sandbox Code Playgroud) 我目前BufferedReader在同一文本文件上初始化了2 秒.当我用第一个文本文件读完文本文件时BufferedReader,我使用第二个文本文件从顶部再次传递文件.需要多次通过同一个文件.
我知道reset(),但它需要先调用,mark()并mark()需要知道文件的大小,我不认为我应该打扰.
想法?包?库?码?
谢谢TJ
我在我的一个项目中使用Java.net.我写了一个从客户端获取inputStream的App Server.但有时我的(缓冲)InputStream无法获取客户端发送到我的服务器的所有OutputStream.我怎么能写一个等待或类似的东西,我的InputStream获取客户端的所有OutputStream?
(我的InputStream不是字符串)
private Socket clientSocket;
private ServerSocket server;
private BufferedOutputStream outputS;
private BufferedInputStream inputS;
private InputStream inBS;
private OutputStream outBS;
server = new ServerSocket(30501, 100);
clientSocket = server.accept();
public void getStreamFromClient() {
try {
outBS = clientSocket.getOutputStream();
outputS = new BufferedOutputStream( outBS);
outputS.flush();
inBS = clientSocket.getInputStream();
inputS = new BufferedInputStream( inBS );
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
java network-programming inputstream serversocket bufferedinputstream
InputStream in = SomeClass.getInputStream(...);
BufferedInputStream bis = new BufferedInputStream(in);
try {
// read data from bis
} finally {
bis.close();
in.close();
}
Run Code Online (Sandbox Code Playgroud)
javadoc for BufferedInputStream.close()未提及底层流是否已关闭:
关闭此输入流并释放与该流关联的所有系统资源.关闭流后,进一步的read(),available(),reset()或skip()调用将抛出IOException.关闭先前关闭的流无效.
显式调用是in.close()必要的,还是应该通过调用来关闭bis.close()?
我一直在研究关于java.io.BufferedInputStream和缓冲的博客文章.显然,多年来,默认情况下,从( Java ) Java 7实现的JavaDocs中明确指出,默认值从可疑的512字节增长到8192字节.我的问题还提出了一个问题:谁/什么决定默认应该是什么 - 它不像我预期的那样是黑色和白色.
我很好奇每个版本的默认缓冲区大小是什么,以及它在其他异乎寻常的JVM中可能是什么.到目前为止,我已经通过源代码,JavaDocs或针对1.0,1.1,1.4,Java 5,Java 6的Sun Bug报告以及(再次推测) Sun的Java 7 JVM 进行了跟踪.
我没有出现的是这个价值
那么,我想知道这些价值是什么以及我在哪里找到它们的参考?
或者,如果那里的任何SOped人可能有权访问其中一个安装那个baring.如果是这样,你可以编译并运行下面的代码,然后在这里报告吗?或者,你知道吗?
import java.io.BufferedInputStream;
import java.io.InputStream;
public class BufferSizeDetector extends BufferedInputStream {
public static void main(String[] args) {
BufferSizeDetector bsd = new BufferSizeDetector(null);
System.err.println(System.getProperty("java.version"));
System.err.println(bsd.getBufferSize());
}
public BufferSizeDetector(InputStream in) {
super(in);
}
public int getBufferSize() {
return super.buf.length;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个代码来使用BufferedInputStream来读取用户的输入,但是当BufferedInputStream读取字节时,我的程序只读取第一个字节并打印它.有没有什么方法可以读取/存储/打印整个输入(这将是整数)除了只读取第一个字节?
import java.util.*;
import java.io.*;
class EnormousInputTest{
public static void main(String[] args)throws IOException {
BufferedInputStream bf = new BufferedInputStream(System.in) ;
try{
char c = (char)bf.read();
System.out.println(c);
}
finally{
bf.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
[shadow @ localhost codechef] $ java EnormousInputTest 5452 5
java ×9
inputstream ×4
android ×1
buffering ×1
file ×1
file-io ×1
history ×1
input ×1
java-io ×1
okhttp ×1
serversocket ×1
text-files ×1
user-input ×1