Tag: io

在Java中读取网页IOException早期EOF

我经常在阅读网页时遇到“早熟EOF”exception。 以下是StackTrace java.io.IOException: Premature EOF at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:556) at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:600) at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:687) at java.io.FilterInputStream.read(FilterInputStream.java:133) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2968) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) at java.io.InputStreamReader.read(InputStreamReader.java:184) at java.io.BufferedReader.fill(BufferedReader.java:154) at java.io.BufferedReader.readLine(BufferedReader.java:317) at java.io.BufferedReader.readLine(BufferedReader.java:382) at Utilities.getPage(Utilities.java:24) while ((line = rd.readLine()) != null) { at TalkPage.(TalkPage.java:15) at Updater.run(Updater.java:65) 以下是getPage()方法 public static String getPage(String urlString) throws Exception { URL url = new […]

如何使用RandomAccessFile读取UTF8编码的文件?

我有用UTF8编码的文本文件(用于特定于语言的字符)。 我需要使用RandomAccessFile来寻找特定的位置并从中读取。 我想逐行阅读。 String str = myreader.readLine(); //returns wrong text, not decoded String str myreader.readUTF(); //An exception occurred: java.io.EOFException

System.out关闭了吗? 我可以重新打开吗?

我正在帮朋友写一些Java代码,他们对Java知之甚少。 所以我给他写了一些辅助函数来轻松完成他眼中有点古怪的事情。 其中一个是函数,它将String写入OutputStream 。 看一看: public void write(String txt, OutputStream out) { PrintWriter printer = new PrintWriter(out); printer.print(txt); printer.close(); } 现在,您可以通过不同的方式轻松地使用它来编写您想要的任何位置。 例如,你可以这样做: (new StreamHelper()).write(“Hello Test”, System.out); 这样做我发现之后System.out.println()不再向shell写入任何内容。 所以我认为也许printer.close()自动也关闭System.out ,我想知道如何重新激活它,我可以在此function再次完成后使用它。 我的假设是否正确? (如果不问这里我怎么能找到?) 在调用write()函数后如何继续使用System.out ? 是否有更好的方法来编写这样的辅助函数?

java.nio.charset.MalformedInputException:输入长度= 1

我有这个(剥离代码示例的HTML标签)函数,用CSV构建HTML表格,但每次我尝试运行它时都会遇到运行时错误,我不知道为什么。 谷歌表示可能有一些编码错误,但我不知道如何改变它。 我的CSV以ANSI编码,包含ä,Ä,Ü,Ö等字符,但我无法控制编码或将来会发生变化。 错误发生在这里: Caused by: java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1 at java.io.BufferedReader$1.hasNext(Unknown Source) at java.util.Iterator.forEachRemaining(Unknown Source) at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source) at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source) at testgui.Csv2Html.start(Csv2Html.java:121) 121号线是 lines.forEach(line -> { 源代码: protected void start() throws Exception { Path path = Paths.get(inputFile); FileOutputStream fos = new FileOutputStream(outputFile, true); PrintStream ps = new PrintStream(fos); boolean withTableHeader = […]

使用Serializable而不是写入和读取对象到文件

在哪些情况下,使用实现可序列化而不是写入和读取对象到/从文件是一个很好的编码实践。在一个项目中我经历了代码。 使用implements serializable的类,即使在该类/项目中没有任何写入/读取对象到/从文件?

如何确定BufferedReader的确切状态?

我有一个BufferedReader (由new BufferedReader(new InputStreamReader(process.getInputStream())) )。 我对BufferedReader的概念很BufferedReader但正如我所看到的,它有三种状态: 一条线正在等待阅读; 调用bufferedReader.readLine会立即返回此字符串。 流是开放的,但没有等待读取的行; 调用bufferedReader.readLine将挂起线程,直到一行变为可用。 溪流关闭; 调用bufferedReader.readLine将返回null。 现在我想确定BufferedReader的状态,以便我可以确定是否可以安全地从中读取而不挂起我的应用程序。 基本过程(见上文)众所周知是不可靠的,因此可能已经挂起; 在这种情况下,我不希望我的主机应用程序挂起。 因此我正在实施一种超时。 我试图首先使用线程进行此操作,但它变得非常复杂。 调用BufferedReader.ready()不会区分上面的情况(2)和(3)。 换句话说,如果ready()返回false,则可能是刚刚关闭的流(换句话说,我的底层进程正常关闭),或者可能是底层进程挂起。 所以我的问题是:如何在不实际调用readLine情况下确定我的BufferedReader readLine的这三种状态中的哪一种? 不幸的是我不能只是调用readLine来检查这个,因为它打开了我的应用程序。 我使用的是JDK 1.5版。

使用Java访问类路径中特定文件夹中的文件

我想在com.example.resources包中读取一堆文本文件。 我可以使用以下代码读取单个文件: InputStream is = MyObject.class.getResourceAsStream(“resources/file1.txt”) InputStreamReader sReader = new InputStreamReader(is); BefferedReader bReader = new BufferedReader(sReader); … 有没有办法获取文件列表,然后将每个元素传递给getResourceAsStream ? 编辑:在ramsinb建议我改变我的代码如下: BufferedReader br = new BufferedReader(new InputStreamReader(MyObject.class.getResourceAsStream(“resources”))); String fileName; while((fileName = br.readLine()) != null){ // access fileName }

打开文件句柄太多

我正在开发一个庞大的遗留Java应用程序,有很多手写的东西,现在你可以让框架处理。 我现在面临的问题是我们的Solaris服务器上的文件句柄不足。 我想知道跟踪打开文件句柄的最佳方法是什么? 在哪里查看以及什么可能导致打开文件句柄用完? 我无法在Solaris下调试应用程序,只能在我的Windows开发环境中调试。 在Windows下分析打开的文件句柄是否合理?

InputStream.read()返回的是什么意思? 怎么办呢?

InputStream.read返回的0(读取的字节数)是什么意思? 如何处理这种情况? 更新:我的意思是read(byte[] b)或read(byte[] b, int off, int len)返回读取字节数的方法。

每个客户一个线程。 可行?

我正在编写一个Java服务器,它使用普通套接字来接受来自客户端的连接。 我正在使用相当简单的模型,其中每个连接在阻塞模式下都有自己的线程读取。 伪代码: handshake(); while(!closed) { length = readHeader(); // this usually blocks a few seconds readMessage(length); } cleanup(); (线程是从Executors.newCachedThreadPool()创建的,所以启动它们不会有任何重大开销) 我知道这是一个天真的设置,如果线程是专用的OS线程,它不会很好地扩展到许多连接。 但是,我听说Java中的多个线程可以共享一个硬件线程。 真的吗? 知道我将在Linux上使用Hotspot VM,在具有8核和12GB RAM的服务器上,你认为这个设置适用于成千上万的连接吗? 如果没有,有哪些替代方案?