Tag:

这个Java ByteBuffer的行为有解释吗?

我需要将数值转换为字节数组。 例如,要将long转换为byte数组,我有以下方法: public static byte[] longToBytes(long l) { ByteBuffer buff = ByteBuffer.allocate(8); buff.order(ByteOrder.BIG_ENDIAN); buff.putLong(l); return buff.array(); } 这很简单 – 花一点时间,分配一个可以容纳它的数组,并把它放在那里。 无论l的值是什么,我都会得到一个8字节的数组,然后我可以按照预期进行处理和使用。 就我而言,我正在创建一个自定义二进制格式,然后通过网络传输它。 当我使用值773450364调用此方法时,我得到一个数组[0 0 0 0 46 25 -22 124] 。 我有代码也将字节数组转换回它们的数值: public static Long bytesToLong(byte[] aBytes, int start) { byte[] b = new byte[8]; b[0] = aBytes[start + 0]; b[1] = aBytes[start + 1]; […]

从InputStream中删除换行符

我想从java.io.InputStream删除所有换行符(对于\ n和\ r \ n),在读取文件时,相应的方法如下所示: /** * @param target {@linkplain File} * @return {@linkplain InputStream} * @throws Exception */ protected InputStream initInput(final File file) throws Exception { InputStream stream = null; try { if (file.isDirectory()) { // throw exception } if (!file.exists()) { // throw another exception } // // *remove newlines here* // stream […]

如何知道FTP欢迎消息的结束

我的问题是我正在创建一个FTP客户端,到目前为止它的工作完美无缺,除了一个小细节之外,一直困扰着我。 我需要知道FTP欢迎消息跨越了多少行……这是不可接受的! private Socket connection; private PrintWriter outStream; private Scanner inStream; public void InitiateConnection() throws IOException { log.Info(this, “Initiating connection to host: ” + host + “:” + port); connection = new Socket(host, port); log.Info(this, “Connection initiated.”); outStream = new PrintWriter(connection.getOutputStream(), true); inStream = new Scanner(connection.getInputStream()); Listen(); Listen(); Listen(); } public String Listen() throws IOException […]

在写入文件时从文件中读取数据

我正在使用一个专有的Java库,将其数据直接保存到java.io.File ,但我需要能够读取数据,以便直接进行流式处理。 数据是二进制的,一些媒体文件。 java.io.File作为参数传递给这个库,但我不知道如何从中获取流。 有没有一些简单的方法来做到这一点,除了打开文件也读取和尝试同步读/写操作!? 我希望跳过写入文件系统部分,因为我从applet使用它,在这种情况下需要额外的权限。

流定义

我正在阅读Java I / O流,我对与它们相关的正确定义感到困惑。 有人说流是一种传输数据的传送带…… 另一个说流是流或数据序列…… 另一个说流是连接到输入或输出源… 那么正确的定义是什么?

从getInputStream正确关闭Java Process InputStream

我在文档中找不到对此的澄清。 但是当我们有一个Process对象并调用getInputStream() , 当我们完成它时,我们是否会得到一个我们应该明确关闭的新流? 或者我们是否得到了与流程相关的流,我们不应该关闭流程,但流程是否会关闭它? 基本上,我们应该如何与从Process.getInputStream()获得的流进行交互? 关闭还是不关闭?

如何将中断键序列发送到Java进程?

我有一个Java Process实例及其相关流的句柄。 这是一个控制台程序。 我想模拟一个中断序列。 在Windows上,这是Ctrl-C。 这可能没有当地人吗? 这样做的原因是:控制台程序本身就是一个命令行控制台,控制另一种语言的虚拟机。 用户可以从此控制台程序运行另一个程序。 程序运行时,中断序列将中断底层程序的执行并导致控制台程序进入调试模式。 我们用Java包装这个控制台调试器,以便它可以通过IDE(Eclipse)驱动。 发送中断序列将等同于在Eclipse调试器中按“suspend”。

Java InputStream.read(byte ,int,int)方法,如何阻塞,直到读取了确切的字节数

我正在编写一个简单的客户端/服务器网络应用程序,通过TCP套接字发送和接收固定大小的消息。 到目前为止,我一直在使用Socket类的getInputStream()和getOutputStream()方法来获取流,然后调用InputStream类的read(byte[] b, int off, int len)方法来读取60每次字节数(这是消息的大小)。 后来,我阅读了该方法的Javadoc: public int read(byte [] b,int off,int len)抛出IOException 将输入流中最多 len个字节的数据读入一个字节数组。 尝试读取len个字节, 但可以读取较小的数字 。 实际读取的字节数以整数forms返回。 我想知道是否有任何Java“开箱即用”的解决方案要阻止,直到len字节被读取,必要时永远等待。 我显然可以创建一个简单的循环,但我觉得我正在重新发明轮子。 你能建议我一个干净的Java感知解决方案吗?

在内存中创建一个Zip文件

我正在尝试压缩文件(例如foo.csv)并将其上传到服务器。 我有一个工作版本,它创建一个本地副本,然后删除本地副本。 我如何压缩文件,以便在不写入硬盘的情况下将其发送到纯粹的内存中?

在创建FileInputStream对象时使用InputStream而不是FileInputStream有什么不同

这可能是一个愚蠢的,但我想知道背景操作的差异。 InputStream is = new FileInputStream(filepath); FileInputStream is = new FileInputStream(filepath); 上面两行代码之间的区别是什么,以及它们使用的场景。