Tag: bufferedinputstream

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) […]

java.io.Buffer *流与普通流有何不同?

1)缓冲流如何在后台工作,它们与普通流有什么不同?使用它们的优点是什么? 2) DataInputStream也是基于字节的。 但它有readLine()方法。 这里有什么意义?

如何在最短的时间内在java中克隆输入流

有人能告诉我如何克隆输入流,尽可能少的创建时间? 我需要多次克隆输入流以便多种方法来处理IS。 我尝试了三种方法,因为某种原因,事情不起作用。 方法#1:感谢stackoverflow社区,我发现以下链接很有帮助,并将代码片段合并到我的程序中。 如何克隆InputStream? 但是,使用此代码最多可能需要一分钟(对于10MB文件)来创建克隆的输入流,并且我的程序需要尽可能快。 int read = 0; byte[] bytes = new byte[1024*1024*2]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while ((read = is.read(bytes)) != -1) bos.write(bytes,0,read); byte[] ba = bos.toByteArray(); InputStream is1 = new ByteArrayInputStream(ba); InputStream is2 = new ByteArrayInputStream(ba); InputStream is3 = new ByteArrayInputStream(ba); 方法#2:我也尝试使用BufferedInputStream来克隆IS。 这很快(创建时间最慢== 1ms。最快== 0ms)。 但是,在我发送is1进行处理之后,方法处理is2和is3引发了一个错误,说没有什么可以处理,几乎就像下面引用相同的IS的所有3个变量一样。 is = getFileFromBucket(path,filename); … […]

在Java中复制数据的更快方法?

我被赋予了从服务器复制数据的任务。 我正在使用BufferedInputStream和输出流来复制数据,我正在逐字节地进行。 即使它正在运行但复制数据需要花费很长时间,因为其中一些数据是100的MB,所以肯定它不会起作用。 任何人都可以建议我Byte副本的Byte副本,以便我的代码可以复制几百MB的文件。 缓冲区是2048。 这是我的代码的样子: static void copyFiles(SmbFile[] files, String parent) throws IOException { SmbFileInputStream input = null; FileOutputStream output = null; BufferedInputStream buf_input = null; try { for (SmbFile f : files) { System.out.println(“Working on files :” + f.getName()); if (f.isDirectory()) { File folderToBeCreated = new File(parent+f.getName()); if (!folderToBeCreated.exists()) { folderToBeCreated.mkdir(); System.out.println(“Folder name […]

缓冲大文件; BufferedInputStream限制为2gb; 数组限制为2 ^ 31个字节

我正在顺序处理一个大文件,我想在内存中保留一大块,在64位系统上可以使用16gb ram。 一个快速而肮脏的方法是这样做,简单地将输入流包装到缓冲的输入流中,遗憾的是,这只给了我一个2gb的缓冲区。 我想在记忆中有更多的东西,我有什么替代品?

如何杀死BufferedInputStream .read()调用

我正在编写一个程序来从服务器下载非常大的文件(~2GB)。 我编写了程序以便能够恢复部分完成的下载, 为了模拟一个糟糕的互联网连接,我一直在下载中途时将我的以太网线从我的路由器中拉出来。 不幸的是,这导致我的程序挂起以下调用: while((bytesRead = in.read(data)) > 0) (其中bytesRead是int,in是从HttpURLConnection构建的BufferedInputStream,数据是字节数组)。 我试图通过在另一个线程上调用in.close()来“中断”调用,但是在恢复互联网连接之前它没有任何效果(此时会抛出exception)。 有什么方法可以阻止被切断的互联网连接冻结我的程序吗?

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

我试图使用File对象初始化FileInputStream对象。 我在线上收到FileNotFound错误 fis = new FileInputStream(file); 这很奇怪,因为我已经通过相同的方法打开这个文件多次执行正则表达式。 我的方法如下: 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; } java.io.FileNotFoundException:C:\ dev \ server \ tomcat6 \ webapps \ sample-site(访问被拒绝) at […]

为什么BufferedReader的性能比BufferedInputStream差得多?

我知道使用BufferedReader(包装FileReader)将比使用BufferedInputStream(包装FileInputStream)慢得多,因为原始字节必须转换为字符。 但我不明白为什么它这么慢! 以下是我正在使用的两个代码示例: BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(filename)); try { byte[] byteBuffer = new byte[bufferSize]; int numberOfBytes; do { numberOfBytes = inputStream.read(byteBuffer, 0, bufferSize); } while (numberOfBytes >= 0); } finally { inputStream.close(); } 和: BufferedReader reader = new BufferedReader(new FileReader(filename), bufferSize); try { char[] charBuffer = new char[bufferSize]; int numberOfChars; do { numberOfChars […]

套接字:BufferedOutputStream还是只是OutputStream?

为了在Java中获得最快的TCP传输速度,这是更好的: 选项A: InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); 选项B: BufferedInputStream in = new BufferedInputStream(socket.getInputStream()); BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream()); 我已经读过,当将8 KiB写入OutputStream时,性能会受到影响,建议它一次性写入小块,而不是写入8 KiB。 8 KiB是BufferedOutputStream的默认缓冲区大小。 但是我还读到,当通过网络传输数据时,尽可能快地清除字节是很好的。 这意味着使用缓冲区并以小块写入会增加不必要的开销。 那么,选项A还是选项B? 哪个效果最好? 现在我猜测选项A提供了最高的传输速度,同时消耗了比选项B更多的CPU。选项B可能更好,因为它没有那么慢,但节省了大量的CPU。 – 奖金问题:触摸TCP窗口大小是个好主意吗? 例如,将其设置为64 KiB: socket.setReceiveBufferSize(65536); socket.setSendBufferSize(65536); 我尝试在测试机器上将其设置为128 KiB,因为我读到它可以提高速度但是当服务器有几个连接时,CPU是100%而不是2%,就像我单独离开时一样。 我猜128 KiB太高了,除非你有一台能够处理流量急流的好服务器,但将它设置为32 KiB是否明智? 我认为我的默认值是8 KiB。 (“socket”是“java.net.Socket”)

在Java中向InputStream的开头和结尾添加字符

我有一个InputStream ,我需要在开头和结尾添加字符,并且应该以另一个InputStream类型的变量结束。 我怎么能轻易做到这一点?