java中用DataInputStream读取数据的是后老是出现这样的问题?怎么解决? 5C

流改关的我也关了啊。代码太多我就不全贴出来了
java.io.EOFException
at java.io.DataInputStream.readFully(Unknown Source)
at java.io.DataInputStream.readLong(Unknown Source)
at cn.deos.client.FileDownLoad.run(FileDownLoad.java:183)
at java.lang.Thread.run(Unknown Source)
提示这行有问题,有没有遇到相同类型问题的小伙伴啊!
图片说明

3个回答

 public final long readLong()
                    throws IOException见readLong法DataInput的一般合同。 
从所包含的输入流中读取此操作的字节数。 

Specified by: 
readLong在接口 DataInput 
结果 
该输入流的接下来的八个字节,解释为 long 。 
异常 
EOFException - 如果此输入流在读取八个字节之前到达结束。 
IOException - 流已关闭,包含的输入流不支持关闭后读取,或发生另一个I / O错误。 

qq_34227896
淹死的鱼pp 那这样的问题怎么解绝呢?
大约 2 年之前 回复
u011606457
_1_1_7_ 建议你去看看API文档
大约 2 年之前 回复
u011606457
_1_1_7_ EOFException ,其他EOF就 End of File 的意思
大约 2 年之前 回复
u011606457
_1_1_7_ 意思 就是比如这个输入流 只剩下6字节,你这时候还要求读8字节,输入流已经到尾部了,不满足你的要求,就抛出异常了
大约 2 年之前 回复
qq_34227896
淹死的鱼pp 并且我读的完全超过8个字节了啊
大约 2 年之前 回复
qq_34227896
淹死的鱼pp 兄弟,你知道错的原因吗?你说这个是什么意思
大约 2 年之前 回复

读取的长度比原长度长

qq_34227896
淹死的鱼pp 819959240
大约 2 年之前 回复
benpaodexin_l
benpaodexin_l 我加你qq好友了
大约 2 年之前 回复
benpaodexin_l
benpaodexin_l 回复qq_34227896:你把完整点的代码发出来看看,只有读取的流么?
大约 2 年之前 回复
qq_34227896
淹死的鱼pp 可是我读的文件也才7位数啊,还没达到long的上限呢?
大约 2 年之前 回复

这个是io流错误,运用的输入流,这个错误显示readInt(Unknown Source),所以你首先要建立输出流,输出到一个文本,然后从文本里面读取,因为是DataInputStream所以你是看不到文本里面的东西的,只有读取可以。问题是:没有输出,无法读取到数据。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java socket读取服务端返回数据流

描述:发送一条命令给服务端,读取服务端返回信息并格式化显示 问题:如何读取反馈的指定信息,也就是发送之后立马反馈的信息,不包括后面服务端加载的信息 解决:现在我用的是readLine()读取部分命令发送反馈信息以结尾固定的格式指定退出循环,退出读取,部分命令这个方法确实能行,部分命令这个不行,因为部分命令反馈的信息结尾不是一个固定的格式,请问如何才能读取到自己想要的信息

java数据流DataInputstream类中的方法readBoolean()的作用是什么?

书上说readBoolean()的作用是读取一个布尔值,但是具体是 根据什么得到布尔值的?这个布尔值可以用于什么操作?跪求指点!

关于java 不能完全读取socket二进制流的问题(数据量越大问题就越严重)

我在java中用socket读取server端发过来的二进制流,从包头前面11个字节中读取包体的字节总数,然后再循环读取包体的字节数,但当server端的数据字节比较大时就不能完全读过来 ,如从server端发送了 3万个字节,这时client端程序就会不能完全读出server端的字节,可能只能读2万多个; 当字节数少于2000 以下时,就基本没有出现过问题。 我把程序贴出来,这段程序有什么问题么?接收大量的数据该如何处理为好? 想了很久,没想明白是怎么回事,望各位不吝赐教!!! public class SocketService { private static Socket socket; private static InputStream is; private static OutputStream os; private static BufferedInputStream br; public static byte[] getReceiveBytes(Catalog catalog,byte[] b) { byte[] receive_body_byte = {}; try { socket = new Socket(catalog.getPrivateTcpIp(), Integer.parseInt(catalog.getPrivateTcpIPPort())); is = new DataInputStream(socket.getInputStream()); os = new DataOutputStream(socket.getOutputStream()); os.write(b); br = new BufferedInputStream(is); // 包体长度 packlength。 String packlength = ""; // 先收11个字节,函数解析出数据包长度 byte[] encry_byte = new byte[11]; int sizeHead = br.read(encry_byte); for (int m = 0; m < sizeHead; m++) { if (m > 6) { packlength = packlength + Util.byte2HexStr(encry_byte[m]); } } receive_body_byte = new byte[Integer.parseInt(packlength, 16)]; // 接收剩下的字节 int size = br.read(receive_body_byte); //打印接收到的字节 System.out.println("\n-------接收到的字节总数是-------------- "+receive_body_byte.length); os.flush(); is.close(); os.close(); br.close(); } catch (Exception e) { System.out.print("**********Socket异常!!!!*********"+e.getMessage()); return null; } return receive_body_byte; } ========= 上面的程序不知哪里有问题,于是我就又优化了一下,代码如下,但遇到大数据还是不能全读出来=================== public class SocketService { private static Socket socket; private static InputStream is; private static OutputStream os; private static BufferedInputStream br; public static byte[] getReceiveBytes(Catalog catalog,byte[] b) { byte[] receive_body_byte = {}; try { socket = new Socket(catalog.getPrivateTcpIp(), Integer.parseInt(catalog.getPrivateTcpIPPort())); is = new DataInputStream(socket.getInputStream()); os = new DataOutputStream(socket.getOutputStream()); os.write(b); br = new BufferedInputStream(is); // 包体长度 packlength。 String packlength = ""; // 先收11个字节,函数解析出数据包长度 byte[] encry_byte = new byte[11]; int sizeHead = br.read(encry_byte); for (int m = 0; m < sizeHead; m++) { if (m > 6) { packlength = packlength + Util.byte2HexStr(encry_byte[m]); } } receive_body_byte = new byte[Integer.parseInt(packlength, 16)]; int size = 0 // 分次取server端的数据,即每次从流中取1024个字节,不足1024就一次取过来 while(true){ int a = receive_body_byte.length/1024; if(a>=1){ int last=0; Thread.sleep(280); for(int i=0;i<a;i++){ //Thread.sleep(50); byte[] btmp = new byte[1024]; br.read(btmp); getBytes(receive_body_byte,i*1024,btmp); last = last + i*1024; Thread.sleep(100); } //然后取剩余不足1024个的字节 int aa = receive_body_byte.length%1024; byte[] bmp = new byte[aa]; //Thread.sleep(200); if(aa!=0){ br.read(bmp); System.out.println(" aa------------"+aa); p(bmp); Thread.sleep(100); getBytes(receive_body_byte,a*1024,bmp); } break; }else{ br.read(receive_body_byte); break; } } //打印接收到的字节 System.out.println("\n-------接收到的字节总数是-------------- "+receive_body_byte.length); os.flush(); is.close(); os.close(); br.close(); } catch (Exception e) { System.out.print("**********Socket异常!!!!*********"+e.getMessage()); return null; } return receive_body_byte; }

readUTF()使用报 java.io.EOFException异常

今天在编程的时候,用到了DataInPutStream类的readUTF()方法时报了个异常,查了好多资料也不能解决,求大神指点啊.高分悬赏. ``` package IO流; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class DataTest { /** * 数据输入输出流 * */ public static void main(String[] args) throws IOException { //向指定文件中写入数据 //打开文件输出流 FileOutputStream fos=new FileOutputStream("G://word.txt"); //将此输出流链接到指定基础输出流DataOutPutStream DataOutputStream dos=new DataOutputStream(fos); //写入数据: dos.writeBytes("我是大禹!");//用此方法写入的数据用记事本打开是乱码 dos.writeChars("我治水!");//用此方法写入的数据用记事本打开是乱码 dos.writeUTF("你智障吗?"); //关闭流 fos.close(); //从文件中读取数据 //首先打开文件输入流 FileInputStream fis=new FileInputStream("G://word.txt"); //将此输入流连接到基本数据输入流DataInPutStream DataInputStream dis=new DataInputStream(fis); //开始读取数据啦 // String s=dis.readUTF(); System.out.println(dis.readUTF()); dis.close(); } } ``` 异常信息: Exception in thread "main" java.io.EOFException at java.io.DataInputStream.readFully(DataInputStream.java:180) at java.io.DataInputStream.readUTF(DataInputStream.java:592) at java.io.DataInputStream.readUTF(DataInputStream.java:547) at IO流.DataTest.main(DataTest.java:35)

Golang中的Java.io.DataInputStream.readFloat()

<div class="post-text" itemprop="text"> <p>I am writing a program that emulates the functionality of the following Java program:</p> <pre class="lang-java prettyprint-override"><code>public class MFCC { public static void main(String[] args) throws IOException, InterruptedException, Exception { System.out.println("MFCC Coefficient Extractor"); // Executables String sox = "/usr/bin/sox"; String x2x = "/usr/local/bin/x2x"; String frame = "/usr/local/bin/frame"; String window = "/usr/local/bin/window"; String mcep = "/usr/local/bin/mcep"; String swab = "/usr/local/bin/swab"; // Command Line Options String WavFile = "/output/audio.wav"; String RawFile = WavFile + ".raw"; String frameLength = "400"; String frameLengthOutput = "512"; String framePeriod = "80"; String mgcOrder = "24"; String mfccFile = WavFile + ".mfc"; String soxcmd = sox + " " + WavFile + " " + RawFile; launchProc(soxcmd, "sox", WavFile); // MFCC String mfcccmd = x2x + " +sf " + WavFile + " | " + frame + " -l " + frameLength + " -p " + framePeriod + " | " + window + " -l " + frameLength + " -L " + frameLengthOutput + " -w 1 -n 1 | " + mcep + " -a 0.42 -m " + mgcOrder + " -l " + frameLengthOutput + " | " + swab + " +f &gt; " + mfccFile; launchBatchProc(mfcccmd, "getSptkMfcc", WavFile); int numFrames; DataInputStream mfcData = null; Vector&lt;Float&gt; mfc = new Vector&lt;Float&gt;(); mfcData = new DataInputStream(new BufferedInputStream(new FileInputStream(mfccFile))); try { while (true) { mfc.add(mfcData.readFloat()); } } catch (EOFException e) { } mfcData.close(); System.out.println("Coefficient vector length: " + mfc.size()); System.out.println("The coefficients are: " + mfc); } } </code></pre> <p>(Run it by cloning <a href="https://github.com/gilgameshskytrooper/javamfcc.git" rel="nofollow noreferrer">this repo</a> and running <code>docker build -t javamfcc:latest . &amp;&amp; docker run --name javamfcc --rm -v $PWD/output:/output javamfcc:latest</code>)</p> <p>The basic gist of what this program is by running an audio file through a list of pipes of executables provided by <a href="https://sourceforge.net/projects/sp-tk/" rel="nofollow noreferrer">the SPTK project</a>, and parsing the final output by reading 4 bytes as a float, and appending those values to a single vector.</p> <p>I more or less have a good idea of how to get the pipes, but am having trouble figuring out how I can loop through the final *io.Reader and read every 4 bytes as a float (as is accomplished in <code>Java.io.DataInputStream.readFloat()</code>) done with the following code:</p> <pre class="lang-golang prettyprint-override"><code>package main import "fmt" func main() { fileName := "/output/audio.wav" frameLength := 400 frameLengthOutput := 512 framePeriod := 80 mgcOrder := 24 mfcc := exec.Command("mfcc.sh", "/output/"+fileheader.Filename, strconv.Itoa(frameLength), strconv.Itoa(frameLengthOutput), strconv.Itoa(framePeriod), strconv.Itoa(mgcOrder)) mfccout, mfccerr := mfcc.Output() if mfccerr != nil { log.Println("Error executing mfcc.sh") panic(mfccerr) } b := bytes.NewReader(mfcc) } </code></pre> <p>mfcc.sh</p> <pre class="lang-sh prettyprint-override"><code>#!/bin/bash filename=$1 frameLength=$2 frameLengthOutput=$3 framePeriod=$4 mgcOrder=$5 echo "filename: "$filename echo "frameLength: "$frameLength echo "frameLengthOutput: "$frameLengthOutput echo "framePeriod: "$framePeriod echo "mgcOrder: "$mgcOrder x2x +sf $filename | frame -l $frameLength -p $framePeriod | window -l $frameLength -L $frameLengthOutput -w 1 -n 1 | mcep -a 0.42 -m $mgcOrder -l $frameLengthOutput | swab +f </code></pre> </div>

java从同一个字节数组读取数据,两个输入流为什么会互相受影响

代码如下 ``` public static void main(String[] args) { byte[] test = new byte[100]; for (int i = 0; i < test.length; i++) { test[i] = (byte) i; } ByteArrayInputStream bins = new ByteArrayInputStream(test); DataInputStream dins = new DataInputStream(bins); try { System.out.println("第一次读取前dins有效长度:" + dins.available()); System.out.println("第一次读取一个字节:" + dins.readByte()); System.out.println("第一次读取又读取一个字节:" + dins.readByte()); System.out.println("第一次读取后dins有效长度:" + dins.available()); dins.close(); bins.close(); System.out.println("第一次读取后原字节数组的长度:" + test.length); ByteArrayInputStream bins1 = new ByteArrayInputStream(test); DataInputStream dins1 = new DataInputStream(bins); System.out.println("第二次读取前dins1有效长度:" + dins1.available()); System.out.println("第二次读取一个字节:" + dins1.readByte()); System.out.println("第一次读取又读取一个字节:" + dins1.readByte()); System.out.println("第一次读取后dins有效长度:" + dins1.available()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } ``` 输出内容如下 第一次读取前dins有效长度:100 第一次读取一个字节:0 第一次读取又读取一个字节:1 第一次读取后dins有效长度:98 第一次读取后原字节数组的长度:100 第二次读取前dins1有效长度:98 第二次读取一个字节:2 第一次读取又读取一个字节:3 第一次读取后dins有效长度:96

Java对象流读取时出错

import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.OutputStream; import java.io.Serializable; import java.net.ServerSocket; import java.net.Socket; public class sever { public static void main(String[] args) throws ClassNotFoundException { Socket socket; InputStream is; ObjectInputStream ois; FileOutputStream fos; File file; Object object; User user=null; try { ServerSocket ss=new ServerSocket(9999); socket=ss.accept();System.out.print("hh"); is=socket.getInputStream(); ois=new ObjectInputStream(is); user=(User)ois.readObject(); 这一行有错误。 file=new File("C:/Users/lenovo/Desktop/gg1/a.mp4"); fos=new FileOutputStream(file); while(true){ fos.write(user.getBytes(), 0,user.getBytes().length); fos.flush(); } } catch (IOException e) { } } } class User implements Serializable{ private static final long serialVersionUID = 1L; private byte[] bytes=new byte[1024]; public byte[] getBytes() { return bytes; } public void setBytes(byte[] bytes) { this.bytes = bytes; } } 这个是服务器端,在从对象流中读取对象的时候报错了(错误的地方上面有标识) 错误提示: java.lang.ClassNotFoundException 请求路过的各位大神解答一下

InputStream 读取不完整求解

``` public static String getImageStr(String urlString){ try { // 构造URL URL url = new URL(urlString); // 打开URL连接 URLConnection con = url.openConnection(); InputStream is = null; byte[] data = null; try { is = con.getInputStream(); data = new byte[is.available()]; is.read(data); is.close(); } catch (IOException e) { e.printStackTrace(); } // 加密 BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data); }catch (Exception e){ e.printStackTrace(); } return null; } ``` urlString 下载到文件流。 我需要把把流转成base64编码的字符串,就给接口调用方。他们解析出来的图片基本都是不完整的。不知道这的哪里读取除了问题。请教大神改改。万分感谢。

java关于二进制文件读取问题

用lucene写了一个抓包程序,在检索文件过程中,我通过数据包偏移量来读取指定内容并写入新文件,但是根据偏移量单次去读可以找到文件内容,但是使用循环只能读到第一次循环的内容后面的都读取不到,我根据生成的偏移量,一次一次去查询,可以找到内容,但在这个循环里却无法找到,求大神指点 这是关键代码部分: long start=System.currentTimeMillis(); InputStream os=new FileInputStream("dfda.cap"); DataInputStream in=new DataInputStream(os); byte[] bytes=new byte[24]; in.read(bytes, 0, 24); System.out.println(bytes); FileOutputStream fos3=new FileOutputStream("abd.cap",true); //System.out.println(bytes.length); fos3.write(bytes); fos3.flush(); TopDocs hits=isa.search(t1, 10); long end=System.currentTimeMillis(); System.out.println("共花费"+(end-start)+"milliseconds"); System.out.println("共有"+hits.totalHits+"匹配"); for(ScoreDoc scoreDoc:hits.scoreDocs) { Document doc=isa.doc(scoreDoc.doc); int length=Integer.parseInt(doc.get("length")); int len=Integer.parseInt(doc.get("len")); System.out.println(length); System.out.println(len); byte[] bytess=new byte[len]; in.skipBytes(length); in.read(bytess); System.out.println(bytess); fos3.write(bytess); fos3.flush(); System.out.println("写入完成!"); } in.close(); fos3.close(); }

使用DataOutputStrea传输文件,只传输了一半的数据

String fileName = "test.zip"; String savePath = "tedd.zip"; try { DataInputStream dis = new DataInputStream( new FileInputStream(fileName)); DataOutputStream dos = new DataOutputStream( new FileOutputStream(savePath)); int bufferSize = 1024; byte[] buf = new byte[bufferSize]; while (true) { int read = 0; if (dis != null) { read = dis.read(buf, 0, bufferSize); } if (read == -1) { break; } dos.write(buf, 0, dis.read(buf)); dos.flush(); } dos.close(); dis.close(); } catch (IOException e) { e.printStackTrace(); }

求助啊!java文件路径的问题

从客户端传入一个文件路径:C:\\Users\\msg.log 在服务器端接受到后无法获取指定的文件(确定文件路径下文件存在) 服务器端: ``` BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream())); String str = null; char[] temp = new char[1024]; reader.read(temp); str = String.valueOf(temp); DataInputStream dis = new DataInputStream( new FileInputStream(str)); ``` 试验过如果在这里直接给str赋值C:\\Users\\msg.log是可以取到文件的 也试过replaceAll(),但是使用str.replaceAll("\\", "\\\\");会报错

关于Socket中的数据流获取

诚心请教,这段时间在做一个项目,一个GPRS的数据中心。GPRS终端通过Internet将数据传输至数据中心。所以我设想通过Socket去实现通讯。在做model的时候却出现了一个问题。我获取的一段心跳数据出现了错误,做数据比对是用十六进制的形式进行比对的(源数据是十六进制)。代码如下,不知道我错在什么地方请各位指点。[code="java"] private BufferedReader getReader(Socket socket) throws IOException { InputStream socketIn = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn)); }[/code] [code="java"] in= getReader(connection); String str=""; while((str=in.readLine())!=null){ System.out.println("has receive...."); System.out.println("收到原码:"+str); System.out.println("转换为16:"+ String2Hex(str)); if(str.equals("end")) break; } connection.close(); }[/code] 转换成16进制的代码如下: [code="java"] public static String String2Hex(String s){ String str = ""; for(int i=0;i<s.length();i++){ int ch = s.charAt(i); String ss = Integer.toHexString(ch); str = str + ss; } return str.toUpperCase(); } [/code] 我自己分析了一下,但是不知道我的分析是否正确。我分析是在获取Socket的流时候就已经出现了错误,也就是 [code="java"] InputStream socketIn = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn)); [/code] 所以str=in.readLine()就已经是一列错误的字符串了 [code="java"]该心跳包正确的16进制串为:6831003100689B13727077000260000001006A166831003100689B13727077000260000001006A166831003100689B13727077000260000001006A166831003100689B13727077000260000001006A166831003100689B13727077000260000001006A166831003100689B13727077000260000001006A16 我解析的为:68310310689b13727077026000106a1668310310689b13727077026000106a1668310310689b13727077026000106a1668310310689b13727077026000106a1668310310689b13727077026000106a1668310310689b13727077026000106a16 [/code] [b]问题补充:[/b] 感谢megcker 但是问题还是没有解决啊 期待 [b]问题补充:[/b] 6831031068fffd727077026000106a16 这是我使用megcker提供的方法解析出来的前部分 [b]问题补充:[/b] tfqjavaeye 说的这个控制字符没有读取出来的信息是一种思考的方向。但却不是做了((str=in.readLine())!=null)这个判断的原因。当我不用这个判断直接读取以后就转换也还是一样的缺少0 [b]问题补充:[/b] 以上解释出来的用的是[code="java"]DataInputStream dis = new DataInputStream(connection.getInputStream()); //BufferedReader streamReader = getReader(connection); System.out.println("服务器接收到客户端的连接请求:" + String2Hex(dis.readLine())); [/code] 解析出来的为::68310310689b13727077026000106a1668310310689b13727077026000106a1668310310689b13727077026000106a1668310310689b13727077026000106a1668310310689b13727077026000106a1668310310689b13727077026000106a16 我在[url]http://www.leftworld.net/online/j2sedoc/javaref/java.io.datainputstream_dsc.htm#readUTF(java.io.DataInput)[/url]这里发现一段话 数据输入流和数据输出流以稍加修订的 UTF-8 格式表示 Unicode 字符串。 。。。。。。 这种格式与“标准的”UTF-8 格式的区别如下: Null 字符 '\u0000' 用两个字节而不是一个字节格式编码,所以编码后的字符串永不会包含空字符。 不是到是不是因为他编码后的字符串不包含空字符才会导致 我在解析出来的数据中缺少0 也就是tfqjavaeye说的 [b]问题补充:[/b] 问题已经解决了 dwangel 的说法很正确啊 一直都只盯着流 却忽略了这里 多谢各位了

新手学java io 输入数据和输出数据不一致?

代码:新手学IO [code="java"] package woca; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FilterOutputTester { public static void main(String[] args) throws IOException { FileOutputStream out1 = new FileOutputStream("D:\\test.txt"); BufferedOutputStream out2 = new BufferedOutputStream(out1, 256); DataOutputStream out = new DataOutputStream(out2); out.writeUTF("你好啊"); out.writeUTF("再见"); out.close(); InputStream in1 = new FileInputStream("D:\\test.txt"); BufferedInputStream in2 = new BufferedInputStream(in1, 3); DataInputStream in = new DataInputStream(in2); System.out.println(in.readUTF()); in1.close(); } } [/code] 大家也能看到我往 D盘test里边先写入 了 字符"你好啊"又写入了"再见" 也写入进去了 但是读取出来的却只有[color=red]你好啊[/color]这是怎么回事啊? 谢谢了 ! 我实在是想不到答案了!

readUTF报错java.io.EOFException?

import java.io.*; public class DataInputstream { public static void main(String[] args) { int n; String s; try { DataInputStream dis=new DataInputStream(new FileInputStream("E:\\a.txt"));//文件夹内是“java编程”路径是绝对路径 s=dis.readUTF(); n=dis.readInt(); System.out.println(s); System.out.println(n); }catch (Exception e){ System.out.println(e); System.out.println("fail"); } } } //注销掉s=dis.readUTF();和system.out.println(s);之后输出的是-408384539 //这是哪里出问题了吗,还是语言语法错了?

Android socket通信,数据读取。

public class ChatRoom extends ActionBarActivity { protected TextView tv_chat_show; protected EditText ed_chat_input; protected Button btn_send; protected ActionBarActivity that; protected String receiverMsg; protected String sendStr; protected Socket socket; protected boolean flag; protected boolean isClicked; // 创建handle 对象处理接受数据 Handler myHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); tv_chat_show.append("server: " + msg.obj.toString() + "\n"); Log.i("show", msg.obj.toString()); } }; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.chat_room); tv_chat_show = (TextView) findViewById(R.id.tv_chat_show); ed_chat_input = (EditText) findViewById(R.id.ed_chat_input); btn_send = (Button) findViewById(R.id.btn_send); that= this; // 套接字是否存在标志 flag = false; // 按钮是否点击标志 isClicked = false; // 建立线程连接socket new Thread(){ @Override public void run() { super.run(); socket = new Socket(); try { socket.connect(new InetSocketAddress("10.1.11.38", 443), 5000); flag = true; } catch (IOException e) { e.printStackTrace(); } } }.start(); // 创建套接字发送线程 Thread threadSend = new Thread(){ @Override public void run() { super.run(); try { // 等待1秒确保套接字建立完成 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } DataOutputStream dos; //套接字存在并且点击发送按钮 while(flag) { if(isClicked) { try { dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF(sendStr); isClicked = false; dos.close(); Toast.makeText(that,"发送" + sendStr,Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } } } } }; // 创建套接字接受线程 Thread threadRev = new Thread(){ @Override public void run() { super.run(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } DataInputStream dis; while(flag){ try { dis = new DataInputStream(socket.getInputStream()); receiverMsg = dis.readUTF(); Log.i("rev",receiverMsg); Message rM = new Message(); rM.obj = receiverMsg; myHandler.sendMessage(rM); dis.close(); }catch (IOException e){ e.printStackTrace(); } } } }; threadSend.start(); threadRev.start(); btn_send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sendStr = ed_chat_input.getText().toString().trim(); ed_chat_input.setText(null); tv_chat_show.append("Client: " + sendStr + "\n"); Log.i("isClicked", "点击"); isClicked = true; } }); } } 测试Log.i("rev",receiverMsg);能够接收到服务器传回来的消息,但是点击发送后软件会崩溃,提示 unfortunately,**** is stoped; Android studio报错信息: 12-22 10:57:34.290 17263-17797/com.teemo.oneteemo E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-931 Process: com.teemo.oneteemo, PID: 17263 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.java:200) at android.os.Handler.<init>(Handler.java:114) at android.widget.Toast$TN.<init>(Toast.java:342) at android.widget.Toast.<init>(Toast.java:99) at android.widget.Toast.makeText(Toast.java:248) at com.teemo.oneteemo.ChatRoom$3.run(ChatRoom.java:109)

请求大佬支援!数据流读写文件有误

![图片说明](https://img-ask.csdn.net/upload/201906/01/1559371527_57724.png) ``` package com.sxt.io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInput; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; /* * 数据流 * 1.写出后读取 * 2.读取的顺序与写出的顺序保持一致 * DataOutputStream DataInputStream * */ public class DataTests { public static void main(String[] args) throws IOException { //写出 OutputStream bos = new FileOutputStream(new File("abc.txt")); DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(bos)); //操作数据类型+数据 dos.writeUTF("编码辛酸泪,谁解其中味"); dos.writeInt(18); dos.writeBoolean(true); dos.writeChar('a'); dos.flush(); String line; while((line=(bos.readLine())!=null) { } //读取 DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(line))); //顺序与写出顺序一致 String msg = dis.readUTF(); int age = dis.readInt(); Boolean flag = dis.readBoolean(); char ch = dis.readChar(); System.out.println(age); } } ```

使用socket通信,android客户端,java写的服务器,传输数据时总出现异常

客户端: public void run() { // TODO Auto-generated method stub try { s = new Socket(ip, port); DataOutputStream os = new DataOutputStream(s.getOutputStream()); os.writeUTF("可以准备接收了吗?"); ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); out.writeObject(u); out.flush(); out.close(); System.out.println("用户名是:"+u.getID()); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ``` ``` 服务器: ``` try{ ServerSocket ss = new ServerSocket(9999); System.out.println("服务器正在监听!"); Socket s = ss.accept(); System.out.println("建立连接!"); DataInputStream is = new DataInputStream(s.getInputStream()); String str = is.readUTF(); System.out.println(str); ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); User u = (User)ois.readObject(); ois.close(); System.out.println("用户ID :"+u.getID()); }catch(Exception e){ e.printStackTrace(); } ``` 异常: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at java.io.DataInputStream.readUnsignedShort(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at com.server.EasyServer.main(EasyServer.java:24) (在os.writeUTF一行)

学习Io流用fileinputstream read用判断==-1可以读取额!=-1出现异常

package text6; impor java.io.*; public class Demo11_3 { public static void main(String[] args) { File f=new File("f:/bb.txt"); FileInputStream fis=null; try { //因为File没有读写的能力,所以需要使用InputStream fis=new FileInputStream(f); //定义一个字节数组,相当于缓存 byte []bytes=new byte[1024]; int n=0;//得到实际读取到的字节数 while((n=fis.read(bytes))!=-1); { //把字节转成String String s=new String(bytes,0,n); System.out.println(s); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 这样读取不了 而把!=-1改成==1就能读取这是为什么,视频上相反了啊。本人初学java求大神指导

PHP从Java DataOutputStream读取输入流?

<div class="post-text" itemprop="text"> <p>For a while, I've been working on a Java client that sends level information to save online. I have managed using printwriter, but it is really inefficient, and a simple 300KB level turns out to be 3MB after the transfer, and is rather slow.</p> <p>I know people have used "file_get_contents("php://input")", such as in <a href="https://stackoverflow.com/questions/6767273/receive-output-from-java-dataoutputstream-in-a-php-page">receive output from java DataOutputStream in a php page</a>, but I am not sure how to receive specific data from:</p> <pre><code>//phpsend is the DataOutputStream using POST (java) phpsend.writeUTF(username); phpsend.writeUTF(verificationId); phpsend.writeInt(levelsize); phpsend.write(level); //level has been converted to a byte array </code></pre> <p>how would I read each separate write? I know Java had DataInputStream, which had all the corresponding read functions, but how would I do that in PHP? I've heard of "Sockets" and "SOAPClient", but I could not find any information that I could use</p> </div>

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

一文带你入门Java Stream流,太强了

两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:“就想看你写的啊!”你看你看,多么苍白的喜欢啊。那就“勉为其难”写一篇吧,嘻嘻。 单从“Stream”这个单词上来看,它似乎和 java.io 包下的 InputStream 和 OutputStream 有些关系。实际上呢,没毛关系。Java 8 新增的 Stream 是为...

立即提问
相关内容推荐