Tag: bytearrayoutputstream

Java:内存高效的ByteArrayOutputStream

我在磁盘中有一个40MB的文件,我需要使用字节数组将其“映射”到内存中。 起初,我认为将文件写入ByteArrayOutputStream是最好的方法,但我发现在复制操作期间的某个时刻需要大约160MB的堆空间。 如果不使用RAM文件大小的三倍,有人知道更好的方法吗? 更新:感谢您的回答。 我注意到我可以减少内存消耗,稍微告诉ByteArrayOutputStream初始大小要比原始文件大小稍大一些(使用我的代码强制重新分配的确切大小,得到检查原因)。 还有另一个高内存点:当我用ByteArrayOutputStream.toByteArray返回byte []时。 看看它的源代码,我可以看到它正在克隆数组: public synchronized byte toByteArray()[] { return Arrays.copyOf(buf, count); } 我想我可以扩展ByteArrayOutputStream并重写此方法,以便直接返回原始数组。 这里有没有潜在的危险,因为流和字节数组不会被多次使用?

为什么InputStream.read()阻塞在这里?

我应该开发一个简单的SFTP。 事情进展顺利,直到我的ByteArrayOutputStream (在这种情况下, baos )没有编写所有的arrayByte 。 有些人可以向我解释,为什么系统会挂在我身上? 服务器端: public static void main (String[] args) { int portTexto = 5656; String comando; String regexGet = “\\s*(get)\\s[A-z0-9]*\\.[A-z0-9]*\\s*”; String regexPut = “\\s*(put)\\s[A-z0-9]*\\.[A-z0-9]*\\s*”; try{ ServerSocket servSockTexto = new ServerSocket(portTexto); // pegar IP de servidor. try { InetAddress addr = InetAddress.getLocalHost(); System.out.println(addr.getHostAddress()); } catch (UnknownHostException e) { } System.out.println(“Aguardando conexão […]

如何同时使用ByteArrayOutputStream和DataOutputStream(Java)

我在这里遇到了很多问题,我认为这是因为我不太了解如何使用Java提供的API。 我需要将一个int和一个byte[]写入一个byte[] 我想过使用DataOutputStream来解决使用writeInt(int i)和write(byte[] b)的数据写入,并且为了能够将它放入一个字节数组,我应该使用ByteArrayOutputStream方法toByteArray(). 我知道这个类使用Wrapper模式,所以我有两个选择: DataOutputStream w = new DataOutputStream(new ByteArrayOutputStream()); 要么 ByteArrayOutputStream w = new ByteArrayOutputStream(new DataOutputStream()); 但在这两种情况下,我都“松散”了一种方法。 在第一种情况下,我无法访问toByteArray()方法,而在第二种情况下,我无法访问writeInt()方法。 我应该如何一起使用这些课程?