问题标签 [datainputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
9044 浏览

java - Java 原始数据类型 byte 和类 Byte

背景:我有一个任务,我将在非常有限的范围内通过套接字传递信息。每条消息最多可以有 10 个字节,我想我只发送一个字节(因为一个字节足以在协议中发出 256 个不同状态的信号)。现在我开始四处寻找有关此的信息,并且遇到了很多问题。如果可以的话,请纠正我的假设错误并回答我的字面问题。

所以有原始数据类型字节(基本上是介于 -128 和 127 之间的数字,对吗?)。如果我使用

...我将正确的数字打印到控制台,如果我尝试分配超出限制的值,编译器会抱怨。

然后我们有 Byte 类,它显然是从 byte 数据类型(或 API 中所说的 int )创建一个 Byte 对象:

这也会产生预期的结果,并且 20 会打印到控制台,如果我尝试使用高于 127 的数字,编译器会抱怨。

1.数据类型byte和类Byte有什么区别?是否主要是因为该类提供了很多方法,例如 Integer 类为 int 类型提供的方法?

下一个片段会产生奇怪的结果(对我来说):

2. 读取输入,然后输出将输入解释为十进制形式的 ASCII 字符(例如,1 返回 49),然后是数字 13 和 10 的另外两行。这是为什么?

(如果我将 d 声明为 Byte 或 byte 都没有关系,结果是相同的,我已经混合使用从 Byte b 获取值等等,但是这三行(或更多)始终是结果我想要的只是输入马上回到我身上)

基本上我对此有点困惑,但最后,我想要的只是发送这些单个字节的合理方式,当我发送 34 时,我希望对方接收 34,仅此而已。

3. 假设我不使用 Byte 类,只想通过流发送类型字节。所有常规流和阅读器似乎都只读取一个 int (我假设这意味着它们将阻塞,直到它们具有至少两个字节的输入,而我只会发送一个字节)。我是否被迫使用DataInputStream以及 DataOutputStream必须将类型字节包装在对象字节中的位置,还是有其他方法?

所有这一切都让我怀疑我是否可以相信一个对象 Byte 真的只是相当于一个数据字节,仅此而已......我很困惑 :(

提前致谢!

0 投票
3 回答
2790 浏览

java - Java:InputStreams 和 OutputStreams 被共享

我可以分享一个InputStreamorOutputStream吗?

例如,假设我首先有:

...incoming作为一个对象变量。后来我暂时做:

我知道流是具体的,并且从它读取它会消耗它的输入,无论它是从哪里完成的......但是在完成上述操作之后,我仍然可以同时访问两者还是incoming只是连接到一个对象并因此丢失它一旦我声明输入?我知道如果我关闭然后我也会关闭套接字并且我会避免这样做但是我想知道在将它“转移”到之后是否需要以某种方式“回收”它?我必须这样做吗:dataReaderInputStreamincomingdataReaderdataReaderInputStreamincomingdataReader

在整个手术之后再次?

0 投票
4 回答
1092 浏览

java - 使用java读取文本文件中确定数量的行

我有一个包含数据的文本文件。该文件包含所有月份的信息。假设一月份的信息占据了 50 行。比二月开始,它占用了 40 多行。比我三月等...是否可以只读取文件的一部分?我可以说“从 X 行读到 Y 行”吗?还是有更好的方法来做到这一点?我只想打印一个月而不是所有文件的数据。这是我的代码

感谢您的时间。

0 投票
2 回答
6414 浏览

android - 如何在运行时使用“su”发送命令并从 DataInputStream 取回所有行

我正在开发一个程序,该程序需要能够确定 Xlocation 的 android 设备上的内容。我正在使用“su ls Xlocation”

我想取回文件的数组列表,但只能设法取回第一个项目。我是否缺少获取下一行的命令?或者还有什么我需要做的。

下面是我发送的命令

下面是我当前的 doCommand 方法

如目前所见,它只返回真或假。但是在调试中运行我只得到输出中的第一项。(输出=“[first.apk”)

编辑了较新的版本;

现在获得了相当数量的输出,但仍然不是所有目录都在我检查过的字节 [10000] 大小限制内有大项目的地方。

如果有人想对此进行改进并获得有效的确切答案,那么我仍然会查看此帖子。

谢谢

0 投票
3 回答
2000 浏览

java - 如果 IOException 关闭流的 DataInputStream

在所有示例中,每个人都可以找到如下代码:

当这段代码遇到FileNotFound异常时,inputStream没有打开,所以不需要关闭。

但是为什么当IOException我在那个 catch 块中遇到时我看不到inputStream.close()。当输入数据异常抛出时,此操作会自动执行吗?因为如果程序输入有问题,这意味着流已经打开。

0 投票
0 回答
363 浏览

android - 通过套接字发送/接收 ByteArray 时应用程序崩溃

我正在尝试使用套接字通信制作一个简单的聊天应用程序。我的目标是成功发送和接收文本和图像(来自智能手机图库)。文本部分成功,但我在处理图像时遇到了问题。

我使用 dataInput/OutputStream 编写了一个代码,下面是代码,它使用 bytearray 建立用于图像传输的套接字连接(该应用程序对文本和图像使用不同的端口)。

While 循环是等待来自服务器的输入字节数组。处理程序在显示器上显示解码的字节数组。

--> img_input.readFully(byte_input); 我认为这条线有问题。我检查了该处理程序运行良好,并且在空的 while 块中,App 没有死。

会有什么问题?

服务器端代码如下图(消息线程省略)

0 投票
3 回答
1168 浏览

java - Java DataInputStream 与 System.in 的使用

一个简单的程序

行为有些奇怪:它拒绝输出输入的文本......我使用终端输入一些文本,但输出中没有任何内容。它出什么问题了?

0 投票
1 回答
1289 浏览

java - Java得到十六进制反转

我正在尝试读取这样的文件:

现在我想读一个这样的十六进制:

对于任何需要它的人:这是我文件的第一个字节

3412 aa55 0200 0000

问题是我的输出是0x3412aa55但它应该是0x55aa1234。我能做些什么来解决这个问题?

0 投票
1 回答
7972 浏览

android - 我可以将本地文本文件逐行读入字符串数组吗?

问题“如何逐行读取本地(res / raw)文件?” 处理类似的问题,但我无法根据那里提供的答案构建解决方案。我确实得到了一条非常有用的信息(具有 readLine 方法的 DataInputStream 类),我一直在开发者网站上对此进行研究并尝试使其工作。

我想要做的是将存储在文本文件的连续行中的信息读入字符串数组,这样第一行是第一个数组元素,第二行是下一个数组元素,等等......然后这个字符串数组将用于填充下一个打开的活动中的文本字段。这一切都发生在开关盒内(取决于情况,即选择了哪个列表项,加载了不同的文本文件)。这是我到目前为止所拥有的:

到目前为止,除了这些错误之外,编辑器还可以,而且我没有足够的经验来理解它们。我明白他们在说什么,但不知道如何解决。错误位于我试图设置输入流并分配值的开关盒内的部分。最重要的是,在执行 readLine 命令的行中,我得到:“- 未定义类型 DataInputStream 的方法 readLine” “- 未定义类型 InputStream 的方法 readLine”

这我不明白,因为如果我没记错的话,这里(http://developer.android.com/reference/java/io/DataInputStream.html)说 DataInputStream 类有可用的 readLine 方法(我发现了关于这来自上面提到的问题)。显然我没有正确使用 DataInputStream,但我似乎无法弄清楚如何。我在这里查看了几个问题,并多次引用了上面链接的页面。

如果有人能看到我做错了什么,我将非常感谢您的帮助。如果我为这种类型的任务完全找错了树,我为浪费时间而道歉,但是非常感谢一些指导或推荐到适当的教程资源。我花了过去两天试图找出这些错误。

0 投票
2 回答
3246 浏览

c# - C# <-> Java 套接字通信

我正在制作一个 .NET 应用程序,它应该通过套接字与 Java 应用程序进行通信。这是.NET代码:

问题是 Java 应用程序不会发送答案。该应用程序是第 3 方软件,我无法更改它,但是我下载了反编译器并在 Java 类中找到了相关的代码:

在这种情况下,“是”是一个 DataInputStream。以下是发生的情况: 1. 我创建一个套接字并发送消息 2. 我等待响应,没有任何反应 3. 我手动关闭应用程序 - 它导致套接字过期 4. 突然整个消息出现在 Java 应用程序的日志中. 这意味着发生了异常,并且体内确实有东西。

您能否指出错误可能在哪里?我相信 this.is.readFully(body) 线不应该在那里,但我不确定。也许我应该从 C# 代码手动发送 EOF,但我无法找出如何。

该代码的另一个小问题是,消息的前两个字符被删除,这就是为什么我在实际消息前面包含两个空格。

先感谢您。

编辑

所以我试图用一些随机数据填充套接字,我终于得到了答案:

不过,这不是一个好的解决方案,因为我发送的信息必须准确。然后我尝试在发送相关数据后关闭套接字,soc.Disconnect(false);这会导致 Java 应用程序的日志填充正确的调试信息。有没有办法将 EOL 发送到套接字,以便 Java 应用程序停止侦听并开始发送数据?谢谢你。

编辑 2 我试图创建一个 Java 客户端来连接到服务器,同样的事情也发生了。

然后,我创建了一个虚拟服务器来侦听与我正在连接的 Java 应用程序相同的端口,它的行为也与 Java 应用程序一样,并且正在工作。

现在我觉得我唯一的机会是将 EOT 或 EOF 命令发送到流,但我不知道如何在 .NET 上执行此操作,我也无法在互联网上找到答案。