标签: bufferedinputstream

为什么BufferedInputStream将字段复制到局部变量而不是直接使用该字段

当我从中读取源代码时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)

java bufferedinputstream

107
推荐指数
3
解决办法
2329
查看次数

从OKHTTP下载二进制文件

我在我的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)

android inputstream bufferedinputstream okhttp

68
推荐指数
6
解决办法
6万
查看次数

BufferedInputStream的用法

让我在这篇文章前面加上一点谨慎.在Java方面,我是一个初学者.我已经开启和关闭了PHP一段时间,但我已经准备好制作一个桌面应用程序,所以我决定使用Java,原因有很多.

我正在处理的应用程序处于开始阶段(少于5个类),我需要从本地文件中读取字节.通常,文件目前小于512kB(但将来可能会变大).目前,我使用a FileInputStream将文件读入三个字节数组,完全满足我的要求.但是,我已经看到了一个BufferedInputStream提到的,并且想知道我目前这样做的方式是最好的,还是我应该使用一个BufferedInputStream.

我做了一些研究,并在Stack Overflow上阅读了一些问题,但是我仍然遇到麻烦,了解何时使用而不使用的最佳情况BufferedInputStream.在我的情况下,我读取字节的第一个数组只有几个字节(小于20).如果我收到的数据在这些字节中是好的,那么我将文件的其余部分读入另外两个不同大小的字节数组.

我也听过很多人提到分析,看看哪个在每个特定情况下哪个更有效,但是,我没有剖析经验,我不确定从哪里开始.我也会喜欢这方面的一些建议.

对于这么长的帖子我很抱歉,但我真的想学习并理解做这些事情的最佳方法.我总是习惯于第二次猜测我的决定,所以我会喜欢一些反馈.谢谢!

java bufferedinputstream fileinputstream

35
推荐指数
2
解决办法
2万
查看次数

如何查看InputStream中的前两个字节?

应该很简单:我有一个InputStream,我想要查看(不读取)前两个字节,即我希望在我偷看后,InputStream的"当前位置"为0.什么是最好最安全的方法?

答案 - 正如我所怀疑的,解决方案是将其包装在提供可标记性的BufferedInputStream中.谢谢Rasmus.

java inputstream bufferedinputstream

30
推荐指数
3
解决办法
2万
查看次数

我应该缓冲InputStream还是InputStreamReader?

以下两种缓冲方法之间有什么不同(如果有的话)?

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)

java bufferedinputstream buffering bufferedreader java-io

27
推荐指数
2
解决办法
3万
查看次数

Java BufferedReader回到文本文件的顶部?

我目前BufferedReader在同一文本文件上初始化了2 秒.当我用第一个文本文件读完文本文件时BufferedReader,我使用第二个文本文件从顶部再次传递文件.需要多次通过同一个文件.

我知道reset(),但它需要先调用,mark()mark()需要知道文件的大小,我不认为我应该打扰.

想法?包?库?码?

谢谢TJ

java file-io file bufferedinputstream text-files

26
推荐指数
2
解决办法
7万
查看次数

如何读取Server Socket JAVA中的所有Inputstream

我在我的一个项目中使用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

24
推荐指数
1
解决办法
10万
查看次数

当我关闭BufferedInputStream时,底层的InputStream是否也关闭了?

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 inputstream bufferedinputstream

18
推荐指数
3
解决办法
7252
查看次数

在旧的和异国情调的JVM上,java.io.BufferedInputStream的默认缓冲区大小是多少?

我一直在研究关于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 进行了跟踪.

我没有出现的是这个价值

  • Sun JDK 1.2的JVM实现
  • Sun JDK 1.3的实现
  • 任何其他实现的价值(如IBM或其他)

那么,我想知道这些价值是什么以及我在哪里找到它们的参考?

或者,如果那里的任何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)

java history bufferedinputstream

17
推荐指数
2
解决办法
1万
查看次数

如何读取BufferedInputStream中的一行?

我正在编写一个代码来使用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 user-input input bufferedinputstream

17
推荐指数
1
解决办法
2万
查看次数