Tag: io

Kryo反序列化失败,出现“KryoException:Buffer underflow”

我使用Kryo将对象写入字节数组。 它工作正常。 但是当字节数组转换为对象时,它会抛出, com.esotericsoftware.kryo.KryoException: Buffer underflow. 例外。 这是我的反序列化: Kryo k=new Kryo(); Input input=new Input(byteArrayOfObject); Object o=k.readObject(input,ObjectClass.class); 此外,始终无法在我的应用程序中定义对象类型。 在最后的过程中,类转换发生。 因此, 如何解决上面的反序列化错误 有没有办法创建Object而不将类赋予readObject(…,ClassName)?

惯用Clojure将资源从运行jar复制到外部

这似乎是一个经典的问题,但我找不到任何关于它的“clojure方式”。 所以,我在资源/(leiningen项目)里面有一个foo /目录。 当jar’d / uberjar’d时,这个foo /目录放在jar的根目录下。 由于jar中的文件在运行时可能不是物理上一致的,因此您无法使用基本复制function以递归方式将目录复制到外部世界。 存在几种Java世界的解决方案( 如何编写可以提取JAR文件并将其数据存储在指定目录(位置)的Java程序?以及如何从jar资源中提取目录(和子目录)? )但是我没有找到任何现有的Clojure解决方案。 作为初学者(包括Clojure和Java),我不确定如何将上述解决方案转换为Clojure。 逐字逐句地从Java翻译成Clojurish Java Interop似乎并不正确。 有没有“官方”,clojure-idiomatic方式来做到这一点? 请注意,我正在使用Raynes的fs实用程序库。 似乎没有直接执行此function的function,但也许我可以使用一些元素来简化流程? (除了明显的基本io糖)

写“压缩”数组以提高IO性能?

我有一个int和float数组,每个长度为2.2亿(固定)。 现在,我想将这些数组存储/上传到内存和磁盘。 目前,我正在使用Java NIO的FileChannel和MappedByteBuffer来解决这个问题。 它工作正常,但是将数组存储/上传到内存到磁盘需要大约5秒钟(挂钟时间)。 现在,我想让它更快。 在这里,我应该提到大多数数组元素都是0(接近52%)。 喜欢: int arr1 [] = { 0 , 0 , 6 , 7 , 1, 0 , 0 …} 任何人都可以帮助我,有没有很好的方法来提高速度,不存储或加载那些0。 这可以通过使用Arrays.fill(array,0)来补偿。

使用java下载zip文件?

我正在使用Java从Web服务器下载zip文件但不知何故我在每个文件中丢失大约2kb。 我不知道为什么因为相同的代码可以与其他格式一起使用,例如文本,mp3和额外的。 任何帮助表示赞赏? 这是我的代码。 public void download_zip_file(String save_to) { try { URLConnection conn = this.url.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestProperty(“content-type”, “binary/data”); InputStream in = conn.getInputStream(); FileOutputStream out = new FileOutputStream(save_to + “tmp.zip”); byte[] b = new byte[1024]; int count; while ((count = in.read(b)) > 0) { out.write(b, 0, count); } out.close(); in.close(); } catch (IOException e) { […]

如何两次或多次读取BufferedReader?

我有一个文本文件,每行一个整数 – 10 20 50 我想阅读和打印这些数字两次甚至多次。 我尝试了一些代码而失败了。 如何更改代码以打印列表两次? import java.io.BufferedReader; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.InputStreamReader; public class DoubleBuffer { public static void main(String[] args) { try { FileInputStream fstream = new FileInputStream(“c:/files/numbers.txt”); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String strLine; // Read rows while ((strLine = br.readLine()) != null) { System.out.println(strLine); } // Read […]

在Java中将StreamWriter转换为OutputStream?

我试图使用System.setOut将System.out重定向到一个String,它接受一个PrintStream。 有没有办法将StringWriter转换为Stream,以便我可以将它传递给setOut?

文件关闭时,为什么我会关心IOExceptions?

我经常在Java代码中看到这种事情…… try { fileStream.close(); } catch (IOException ioe) { /* Ignore. We do not care. */ } 这是合理的还是骑士的? 我什么时候关心关闭文件失败? 忽略此exception有什么含义?

在给定Charset的情况下将InputStream转换为Stream

我希望将一个InputStream is转换为一个Stream stream给定一个Charset cs ,使得stream由is 。 此外,不应立即读取一行,而是仅在stream需要时才读取。

有没有简洁的方法为Google Guava中的InputStream创建InputSupplier?

Google Guava中有一些工厂方法可以创建InputSuppliers,例如从byte[] : ByteStreams.newInputStreamSupplier(bytes); 或者来自File : Files.newInputStreamSupplier(file); 是否有类似的方法为给定的InputStream创建InputSupplier ? 也就是说,这种方式比匿名类更简洁: new InputSupplier() { public InputStream getInput() throws IOException { return inputStream; } }; 背景:我想将InputStreams与例如Files.copy(…)或ByteStreams.equal(…) 。

如何在Java中找到未关闭的I / O资源?

Java中的许多I / O资源(如InputStream和OutputStream)在完成时需要关闭,如此处所述。 如何搜索我的项目中没有关闭此类资源的地方,例如这种错误: private void readFile(File file) throws IOException { InputStream in = new FileInputStream(file); int nextByte = in.read(); while (nextByte != -1) { // Do something with the byte here // … // Read the next byte nextByte = in.read(); } // Oops! Not closing the InputStream } 我尝试过一些静态分析工具,如PMD和FindBugs,但是他们没有将上面的代码标记为错误。