标签: bufferedinputstream

使用File对象初始化FileInputStream时获取FileNotFoundException

我试图使用File对象初始化FileInputStream对象.我在线上收到FileNotFound错误

fis = new FileInputStream(file);
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我已经通过相同的方法打开这个文件多次执行正则表达式.

我的方法如下:

private BufferedInputStream fileToBIS(File file){

    FileInputStream fis = null;
    BufferedInputStream bis =null; 
    try {
        fis = new FileInputStream(file);
        bis = new BufferedInputStream(fis);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
    return bis;
}
Run Code Online (Sandbox Code Playgroud)

java.io.FileNotFoundException:C:\ dev\server\tomcat6\webapps\sample-site(拒绝访问)
    java.io.FileInputStream.open(本机方法)
    java.io.FileInputStream.(未知来源)
    java
    控制器上的controller.ScanEditRegions.process(ScanEditRegions.java:64)
    处于controller.ScanEditRegions.tidyHTML(ScanEditRegions.java:38)
    的controller.ScanEditRegions.fileToBIS(ScanEditRegions.java:52)
    处的.io.FileInputStream.(未知来源) . .ScanEditRegions.visitAllDirsAndFiles(ScanEditRegions.java:148)
    在controller.Manager.main(Manager.java:10)

java filenotfoundexception bufferedinputstream fileinputstream

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

BufferedInputStream和Blocking

我正在使用a BufferedInputStream来读取套接字.的BufferedInputStream内容如下:

socketInput.read(replyBuffer, 0, 7);
Run Code Online (Sandbox Code Playgroud)

它是由实例化的

socketInput = new BufferedInputStream(mySocket.getInputStream());
Run Code Online (Sandbox Code Playgroud)

mySocket 被定义为 private Socket mySocket;

mySocket 被实例化 mySocket = new Socket(ipAddress, port);

我已经确认mySocket已连接到我的设备.我可以将数据发送到我的设备; 但是,我没有收到我的设备,原因不明,但这不是问题.

BufferedInputStream如果它没有读取任何数据,我希望我在说100ms之后返回.可以BufferedInputStream设置这样做吗?现在,它无限期地阻止.

java sockets bufferedinputstream

6
推荐指数
2
解决办法
4729
查看次数

bufferedinputstream 中标记读取限制有什么用

我是Java流的新手,我想读取特定的文件内容,然后需要从头开始读取。我创建了一个 BufferedInputStream,但我对 BufferedInputStream.mark(int markLimit) 的文档感到困惑

文档说:

public void mark(int readlimit)
Run Code Online (Sandbox Code Playgroud)

此方法在输入中标记一个位置,可以通过调用 reset() 方法将流“重置”到该位置。参数readlimit是设置标记后在标记失效之前可以从流中读取的字节数。例如,如果调用 mark() 时的读取限制为 10,那么当调用 reset() 方法之前从流中读取了 11 个字节的数据时,则该标记无效,并且不需要流对象实例记住标记。

请注意,此方法可以记住的字节数可以大于内部读取缓冲区的大小。它也不依赖于支持标记/重置功能的从属流。

覆盖: FilterInputStream 类中的标记

参数: readlimit - 标记失效之前可以读取的字节数**

我的代码是:

public class Test {
    public static void main(String[] args) throws IOException {

        File resource = new File("beforeFix.txt");          
        FileInputStream fileInputStream = new FileInputStream(resource);
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
        int i = bufferedInputStream.read();
        bufferedInputStream.mark(1);
        i = bufferedInputStream.read();
        i = bufferedInputStream.read();
        i = bufferedInputStream.read();
        i = bufferedInputStream.read();
        i = bufferedInputStream.read();
        i = bufferedInputStream.read();
        i …
Run Code Online (Sandbox Code Playgroud)

java stream bufferedinputstream

6
推荐指数
1
解决办法
7986
查看次数

用BufferedInputStream包装后对原始InputStream的影响

假设我有一个接受InputStream的方法.

此方法需要使用BufferedInputStream包装此InputStream以使用其标记和重置功能.但是,传入的InputStream可能仍然由方法的调用者使用.

public static void foo(InputStream is) throws Exception {
    BufferedInputStream bis = new BufferedInputStream(is);
    int b = bis.read();
}

public static void main(String[] args) {


    try {
        InputStream is = new FileInputStream(someFile);
        foo(is);
        int b = is.read(); // return -1
    }catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:当读取(或初始化)BufferedInputStream时,原始InputStream究竟发生了什么?

我的假设是,如果读取BufferedInputStream,原始InputStream也将向前移动.但是,在调试我的代码之后,我发现InputStream在读取时会返回-1.

如果在这样的过程之后原始的InputStream不可读,我应该如何实现我的目的:

InputStream is;
foo(is);               // Method only take in generic InputStream object
                       // Processing of the passed in InputStream object require mark and reset functionality
int b = is.read();     // …
Run Code Online (Sandbox Code Playgroud)

java inputstream bufferedinputstream

5
推荐指数
1
解决办法
802
查看次数

如何使用字节从 BufferedInputStream 创建字符串?

我正在尝试读取文本文件并创建一个字符串。我正在使用以下代码:

 String FILENAME = "file.txt";
 File file = getApplicationContext().getFileStreamPath(FILENAME);

 int size = (int) file.length();
 System.out.println("size: "+size);
 byte[] bytes = new byte[size];

 BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
 buf.read(bytes, 0, bytes.length);
 buf.close();

 System.out.println("buf string: "+new String(bytes));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,大小是 5295164。在最后一行代码中,我得到以下异常:

 FATAL EXCEPTION: main
 java.lang.OutOfMemoryError
     at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
     at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)
     at java.lang.StringBuilder.append(StringBuilder.java:216)
     at se.egretails.ssapp.MyActivity$4.onClick(MyActivity.java:461)
     at android.view.View.performClick(View.java:4084)
     at android.view.View$PerformClick.run(View.java:16966)
     at android.os.Handler.handleCallback(Handler.java:615)
     at android.os.Handler.dispatchMessage(Handler.java:92)
     at android.os.Looper.loop(Looper.java:137)
     at android.app.ActivityThread.main(ActivityThread.java:4812)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:511)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
     at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

我应该如何解决这个问题?提前致谢。

java string android bufferedinputstream out-of-memory

5
推荐指数
1
解决办法
7426
查看次数

如何在 Android 中访问 Web API 方法的返回值?

在对如何执行此操作感到困惑之后(如此处和此处所示现在使用以下代码成功连接到我的服务器应用程序和适当的 RESTful 方法:

public void onFetchBtnClicked(View v){
    if(v.getId() == R.id.FetchBtn){
        Toast.makeText(getApplicationContext(), "You mashed the button, dude.", Toast.LENGTH_SHORT).show();
    new CallAPI().execute("http://10.0.2.2:28642/api/Departments/GetCount?serialNum=4242");
    }
}

public static class CallAPI extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... params) {

        String urlString=params[0]; // URL to call
        String resultToDisplay = "";
        InputStream in = null;

        // HTTP Get
        try {
            URL url = new URL(urlString);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            in = new BufferedInputStream(urlConnection.getInputStream());
        } catch (Exception e ) {
            System.out.println(e.getMessage()); …
Run Code Online (Sandbox Code Playgroud)

java android http-get bufferedinputstream android-asynctask

5
推荐指数
1
解决办法
2628
查看次数

从文本文件中读取数据并将其显示在textview上

我试图从我的原始文件夹中的文本文件"temp.txt"中读取数据,并在单击按钮"按钮"时在文本视图"text"上显示文件的内容,但我的应用程序崩溃时,我很有可能以错误的方式做这件事,因为我是android和java编程的新手.我在这里粘贴代码,任何帮助将不胜感激

案例R.id.b:

        InputStream is = getResources().openRawResource(R.raw.temp);
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        try {
            string = br.readLine();
            while(string != null){
                st = string;
            }
            text.setText(st);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        break;
Run Code Online (Sandbox Code Playgroud)

"st"和"string"都是字符串变量.如果有人能指出另一种简单的方法来做同样的事情,我会很高兴的.

android bufferedinputstream readline bufferedreader

5
推荐指数
1
解决办法
5516
查看次数

Java缓冲了用于流的base64编码器

我有很多PDF文件,我需要使用base64编码其内容.我有一个Akka应用程序,它将文件作为流获取并分发给许多工作人员以编码这些文件并返回每个文件的字符串base64.我有一个基本的编码解决方案:

    org.apache.commons.codec.binary.Base64InputStream;
    ...
    Base64InputStream b64IStream = null;
    InputStreamReader reader = null;
    BufferedReader br = null;
    StringBuilder sb = new StringBuilder();
    try {
        b64IStream = new Base64InputStream(input, true);
        reader = new InputStreamReader(b64IStream);
        br = new BufferedReader(reader);
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
    } finally {
        if (b64IStream != null) {
            b64IStream.close();
        }
        if (reader != null) {
            reader.close();
        }
        if (br != null) {
            br.close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

它有效,但我想知道什么是我可以使用缓冲区编码文件的最佳方式,如果有更快的替代方案.

我测试了一些其他方法,例如:

  • Base64.getEncoder
  • sun.misc.BASE64Encoder
  • Base64.encodeBase64
  • javax.xml.bind.DatatypeConverter.printBase64
  • com.google.guava.BaseEncoding.base64

它们更快但是它们需要整个文件,对吗?此外,我不想在编码1个PDF文件时阻止其他线程.

任何输入都非常有用.谢谢!

java base64 encoding bufferedinputstream

5
推荐指数
1
解决办法
4790
查看次数

BufferedReader如何从S3读取文件?

我在AWS S3中有一个非常大的文件(几GB),我只需要文件中的少量行满足一定的条件.我不想将整个文件加载到内存中,然后搜索并打印这几行 - 这个内存负载太高了.正确的方法是只加载内存中需要的那些行.

根据AWS文档从文件中读取:

fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key));
 displayTextInputStream(fullObject.getObjectContent());

private static void displayTextInputStream(InputStream input) throws IOException {
    // Read the text input stream one line at a time and display each line.
    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    String line = null;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

这里我们使用BufferedReader.我不清楚这里发生了什么.

我们每次读取新行时是否对S3进行网络调用,并且只将当前行保留在缓冲区中?或者是整个文件加载到内存中,然后由BufferedReader逐行读取?或者介于两者之间?

java inputstream bufferedinputstream amazon-s3 bufferedreader

5
推荐指数
1
解决办法
2123
查看次数

Java InputStream + BufferedInputStream 吞下异常

我有一个问题,当抛出异常时,我的程序没有按预期结束。我已经追踪到 InputStream 和 BufferedInputStream 的组合吞下了异常。下面的代码演示了这个问题:

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Test {
    public static void main(String[] args) throws IOException {
        try (InputStream stream = new BufferedInputStream(new MyStream())) {
            int x = stream.read();
            while (x != -1) {
                System.out.println(x);
                x = stream.read();
            }
        }
    }

    static class MyStream extends InputStream {
        int i = 0;

        @Override
        public int read() throws IOException {
            i = i + 1;
            if (i == 5) {
                throw new IOException("i == 5");
            } …
Run Code Online (Sandbox Code Playgroud)

java inputstream bufferedinputstream

5
推荐指数
0
解决办法
61
查看次数