我正在构build一个需要扩展的java服务器。 其中一个servlet将提供存储在Amazon S3中的图像。 最近在负载下,我的虚拟机内存不足,而且在我添加代码来提供图像之后,我非常肯定,stream式传输较大的servlet响应正在导致我的麻烦。 我的问题是:在从数据库或其他云存储中读取数据时,是否有任何有关如何编写java servlet以将大型(> 200k)响应传回浏览器的最佳做法? 我已经考虑将文件写入本地临时驱动器,然后产生另一个线程来处理stream,以便tomcat servlet线程可以重新使用。 这似乎是很重的。 任何想法将不胜感激。 谢谢。
嗨,我是新来的Java ,我想知道什么是最好的select来读取控制台中的用户input,据我所知有3种方式来做到这一点: Console console = System.console(); BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); Scanner reader = new Scanner(System.in); 我应该select哪一个? 为什么这一个,而不是其他的?
我对android开发比较陌生。 我正在开发一个Android应用程序,我发送请求到Web服务器和parsingJSON对象。 经常我得到java.net.SocketTimeoutException: Connection timed out与服务器通信java.net.SocketTimeoutException: Connection timed outexception。 有些时候它可以完美的工作,没有任何问题。 我知道这个问题在很多时候都被问过了。 但是,我仍然没有得到任何令人满意的解决这个问题。 我在下面发布我的logcat和app-server通信代码。 public JSONObject RequestWithHttpUrlConn(String _url, String param){ HttpURLConnection con = null; URL url; String response = ""; Scanner inStream = null; PrintWriter out = null; try { url = new URL(_url); con = (HttpURLConnection) url.openConnection(); con.setDoOutput(true); con.setRequestMethod("POST"); if(param != null){ con.setFixedLengthStreamingMode(param.getBytes().length); } con.setRequestProperty("Content-Type", […]
如何在内存中创build新的File (来自java.io) – 而不是在硬盘上? 我正在使用Java语言。 我不想将文件保存在硬盘上。
这些有什么区别? 我只是学习Java的ATM,但似乎我可以写入文件两种方式,即(我没有复制try-catch块在这里) FileWriter file = new FileWriter("foo.txt"); file.write("foobar"); file.close(); 和 FileWriter file = new FileWriter("foo.txt"); BufferedWriter bf = new BufferedWriter(file); bf.write("foobar"); bf.close(); 我首先理解缓冲数据的概念,那么这是否意味着第一个例子逐个写入字符,第二个缓冲数据首先缓冲到内存并写入一次? 谢谢您的帮助
我正在学习Java的过程中,我找不到关于implements Closeable和implements AutoCloseable接口的任何好解释。 当我实现一个interface Closeable ,我的Eclipse IDE创build了一个方法public void close() throws IOException 。 我可以使用pw.close();closuresstreampw.close(); 没有界面。 但是,我不明白如何使用接口来实现close()方法。 而且,这个接口的目的是什么? 另外我想知道:如何检查IOstream是否真的closures? 我正在使用下面的基本代码 import java.io.*; public class IOtest implements AutoCloseable { public static void main(String[] args) throws IOException { File file = new File("C:\\test.txt"); PrintWriter pw = new PrintWriter(file); System.out.println("file has been created"); pw.println("file has been created"); } @Override public […]
如何从test.java所在的path名获得ddd 。 File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
我有如下代码: class ListPageXMLFiles implements FileFilter { @Override public boolean accept(File pathname) { DebugLog.i("ListPageXMLFiles", "pathname is " + pathname); String regex = ".*page_\\d{2}\\.xml"; if(pathname.getAbsolutePath().matches(regex)) { return true; } return false; } } public void loadPageTrees(String xml_dir_path) { ListPageXMLFiles filter_xml_files = new ListPageXMLFiles(); File XMLDirectory = new File(xml_dir_path); for(File _xml_file : XMLDirectory.listFiles(filter_xml_files)) { loadPageTree(_xml_file); } } FileFilter工作得很好,但是listFiles()似乎是以反向字母顺序列出文件。 […]
注意:这个问题和它的大部分答案都在Java 7发布之前。Java 7提供了自动资源pipe理function,可以很容易地完成这个任务。 如果您使用的是Java 7或更高版本,那么您应该继续讨论Ross Johnson的答案 。 什么被认为是最好的,最全面的方式来closuresJava中的嵌套stream? 例如,考虑设置: FileOutputStream fos = new FileOutputStream(…) BufferedOS bos = new BufferedOS(fos); ObjectOutputStream oos = new ObjectOutputStream(bos); 我知道密切的操作需要被保险(可能通过使用finally子句)。 我想知道的是,是否有必要明确确定嵌套stream是封闭的,还是足够确保closures外部stream(oos)? 有一点我注意到,至less在处理这个特定的例子时,内部stream只能抛出FileNotFoundExceptions。 这似乎意味着,从技术上讲没有必要担心如果失败就closures它们。 这是一个同事写的: 从技术上讲,如果实施得当,closures最外层的stream(oos)就足够了。 但是实施似乎有缺陷。 例如:BufferedOutputStream从FilterOutputStreaminheritanceclose(),它定义为: 155 public void close() throws IOException { 156 try { 157 flush(); 158 } catch (IOException ignored) { 159 } 160 out.close(); 161 […]
我使用Eclipse IDE来开发,编译和运行我的Java项目。 今天,我试图使用java.io.Console类来pipe理输出,更重要的是用户input。 问题是当应用程序“通过”Eclipse运行时, System.console()返回null 。 Eclipse在后台进程上运行该程序,而不是使用我们熟悉的控制台窗口的顶级进程。 有没有办法强制Eclipse将程序作为顶级进程运行,或者至less创build一个JVM可以识别的控制台? 否则,我不得不将这个项目打包并运行在Eclipse外部的命令行环境中。