Tag: 输出流

使用FileInputStream / ObjectOutputStream发送大文件

我的作业需要帮助,非常感谢任何帮助。 我可以毫无问题地发送小文件。 但是当我尝试发送时,假设一个1GB的文件字节数组发送OutOfMemoryError,所以我需要一个更好的解决方案来将文件从服务器发送到客户端。 如何改进此代码并发送大文件,请帮助我。 服务器代码: FileInputStream fis = new FileInputStream(file); byte[] fileByte = new byte[fis.available()]; //This causes the problem. bytesRead = fis.read(fileByte); oos = new ObjectOutputStream(sock.getOutputStream()); oos.writeObject(fileByte); 客户代码: ois = new ObjectInputStream(sock.getInputStream()); byte[] file = (byte[]) ois.readObject(); fos = new FileOutputStream(file); fos.write(file);

在可运行的jar中加载和保存资源?

可能重复: Java程序如何使用.jar中的文件进行读写? 我正在创建一个游戏,我希望所有这些都在runnable jar文件上运行,所以我的所有资源(图像和文本文件)都将在jar文件中。 我遇到的问题是,处理jar中的文件非常困难。 我正在使用eclipse,它有时会对你起作用,因为如果你从eclipse运行它会找到文件,但如果你导出它就不会。 我只是想知道揭露一些事情的正确方法: 我需要能够加载图像(我已经工作了,不知何故。我有点修补它并且意外地做了,所以我不知道它是如何工作的) 我需要能够从文本文件中读取(我也有这个工作,再次,偶然和猜测几个小时。) 我需要能够写入存在且存在于jar中的文本文件。 这就是让我觉得我做错了。 我想要做的就是能够保存某些设置,以便它们在下次加载时工作,而且我不知道如何写入文件。 在eclipse(Indigo)中,我创建了一个名为“resources”的文件夹,并将其标记为源文件夹。 我把所有的图像和文本文件放在那里。 我读了这样的图像: public static Image ammo = new ImageIcon(TankMazeGame.class.getResource(“ammo.png”)).getImage(); 我读了这样的文本文件: InputStream is = TankMazeRunner.class.getClassLoader().getResourceAsStream(“Settings.txt”); Scanner settingsReader = new Scanner(new InputStreamReader(is)); 我正在写这样的设置文件,但它并没有真正起作用,所以这就是我需要帮助的地方。 File settingsFile = new File(DisplayMenu.class.getClassLoader().getResource(“Settings.txt”).getFile()); try { OutputStream os = new FileOutputStream(settingsFile, true); PrintWriter pw = new PrintWriter(os, true); pw.write(“SIZE: ” […]

如何强制CipherOutputStream完成加密但保持底层流打开?

我有一个由另一个OutputStream支持的CipherOutputStream。 在我将所有需要加密的数据写入CipherOutputStream后,我需要附加一些未加密的数据。 CipherOutputStream的文档说调用flush()不会强制最后一个块脱离加密器; 为此,我需要调用close() 。 但是close()也会关闭底层的OutputStream,我仍然需要写更多内容。 如何在不关闭流的情况下强制最后一个块离开加密器? 我是否需要编写自己的NonClosingCipherOutputStream?

蓝牙连接; 无法正确发送字符串

当我需要将服务器蓝牙插槽中的字符串发送到我的客户端蓝牙插槽时,我的程序会遇到麻烦。 一切正常,只要我一次只发送一个字符串(例如聊天)但如果我需要在短时间内编写更多的字符串(以交换信息),字符串将不会从客户端代码中分离出来。 例如,如果我发送“FirstUser”并且在“SecondUser”之后,客户端不会读取“FirstUser”,然后读取“SecondUser”。 它将显示“FirstUserSecondUser”。 我怎样才能避免这种行为? 编辑:如果我让线程在能够发送新消息之前进入hibernate状态,它会读取正确的字符串,但是这个解决方案并不适合我的需要。 服务器代码:发送给所有客户端(已编辑) public synchronized void sendToAll(String message) { try { Thread.sleep(100); } catch (InterruptedException e1) { e1.printStackTrace(); } publishProgress(message); for(OutputStream writer:outputList) { try { writer.write(message.getBytes()); writer.flush(); } catch (IOException e) { System.out.println(“Some-Error-Code”); } } } 服务器代码:从客户端读取: public void run() { String nachricht; int numRead; byte[] buffer = new byte[1024]; while […]

Java中的OutputStream是阻塞的吗? (sockets)

我目前正在为一个项目编写天真的网络代码,并且一位伙伴暗示我有可能当我以一种迭代的方式从服务器向所有客户端发送信息包时,当其中一个客户端没有正确响应时,我可能会遇到严重的延迟。 他因拖钓而闻名,所以当我实现一个现在负责将数据发送到客户端的辅助线程时,我有点怀疑,它有一个队列,服务器只是将数据包添加到那个然后被线程读取以发送数据。 在考虑它之后我现在的问题是天气与否,Java Socket的OutputStream实际上将他想要发送的东西排队,因此事先不需要队列。 只有当客户端没有收到来自客户端的已收到发送对象的响应时,才会出现发生严重问题的可能性。 谢谢。

Java:如何使这个Serializable?

我需要以下类是Serializable。 package helpers; public class XY implements Comparable { public int x; public int y; public XY (int x, int y) { this.x = x; this.y = y; } public int compareTo( XY other ) { String compare1 = this.x + “-” + this.y; String compare2 = other.x + “-” + other.y; return compare1.compareTo( compare2 […]

我可以在Java中复制或拦截输出流吗?

我想拦截标准输出流,然后将内容复制到另一个流,但我也希望保持标准输出流像原始。 我可以用Java实现吗?

测试写入Java OutputStream的内容

我即将为直接输出到OutputStream的XML解析Java类编写junit测试。 例如xmlWriter.writeString(“foo”); 会产生类似foo ,写入XmlWriter实例中保存的输出流。 问题是如何测试这种行为。 一个解决方案当然是让OutputStream成为FileOutputStream,然后通过打开写入的文件来读取结果,但它不是很优雅。

通过ObjectOutputStream发送文件,然后将其保存在Java中?

我有这个简单的服务器/客户端应用程序 我正在尝试让服务器通过OutputStream(FileOutputStream,OutputStream,ObjectOutputStream等)发送文件,并在将其保存到实际文件之前在客户端接收它。 问题是,我试过这样做,但它一直都失败了。 每当我创建文件并将从服务器收到的对象写入其中时,我都会得到一个损坏的图像(我只是将其保存为jpg,但这无关紧要)。 以下是最有可能出现故障的代码部分(您在此处看到的所有看似未声明的对象都已事先声明过): 服务器: ObjectOutputStream outToClient = new ObjectOutputStream( connSocket.getOutputStream()); File imgFile = new File(dir + children[0]); outToClient.writeObject(imgFile); outToClient.flush(); 客户: ObjectInputStream inFromServer = new ObjectInputStream( clientSocket.getInputStream()); ObjectOutputStream saveImage = new ObjectOutputStream( new FileOutputStream(“D:/ServerMapCopy/gday.jpg”)); saveImage.writeObject(inFromServer.readObject()); 所以,我的问题是我无法正确地通过流获取对象而不会丢失文件。

将BufferedWriter和BufferedOutputStream一起使用是否过度?

我想写一个socket。 从阅读网络IO,在我看来,写入它的最佳方式是做这样的事情: OutputStream outs=null; BufferedWriter out=null; out = new BufferedWriter( new OutputStreamWriter(new BufferedOutputStream(outs),”UTF-8″)); BufferedWriter会将输入缓冲到建议的OutputStreamWriter ,因为它会阻止OutputStreamWriter器为每个字符启动编码器。 然后, BufferedOutputStream将缓冲来自Writer的字节,以避免一次将一个字节放到网络上。 它看起来有点像矫枉过正,但这一切似乎都有帮助吗? 感谢任何帮助.. 编辑:从OutputStreamWriter上的javadoc: 每次调用write()方法都会导致在给定字符上调用编码转换器。 生成的字节在写入底层输出流之前在缓冲区中累积。 可以指定此缓冲区的大小,但默认情况下,它足够大,可用于大多数用途。 请注意,传递给write()方法的字符不会被缓冲。 为了获得最高效率,请考虑在BufferedWriter中包装OutputStreamWriter,以避免频繁的转换器调用。 例如: Writer out = new BufferedWriter(new OutputStreamWriter(System.out));