点击任何一个字节,在右边可以看到详细信息。
有什么用?(实战)
传输文件的时候,看传输的成功与否。
比如我是用socket 传输一个文件,代码写完了,但是最后发现文件损坏,打不开。
我首先用16进制查看器,看一下传输文件的开始的几个字节:
然后我打断点看下程序里面读取出来的字节:
发现其实是一样的,80 75 3 4 20
就对应16进制里面的 50 4B 03 04 14
那说明开始传输是对的。但是发现一个点,就是写的代码,有错误:
我读取了1024个字节,但是没有写到文件里面,导致文件头丢失一部分字节,造成文件格式异常。
总结:
万物皆字节。所有的视频,xsl、mp3 都是字节组成的,网络传输都是一个字节一个字节传输的。所以,16进制查看器对程序员帮助还是很大的。
一个字节 = 8 个bit, 11111111,用16进制表示就是两位0xff
16进制查看器下载
https://download.csdn.net/download/u013270444/12921805
附Socket 传输文件的demo 代码:
try {File dir = new File(FILE_PATH);if (!dir.exists() && !dir.isDirectory()) {//判断文件目录是否存在FileUtils.createSDDir(FILE_PATH);}//创建socketSocket socket = new Socket(qrCodeBean.ip, qrCodeBean.port);Log.e("ThreadTAG", "run: -----" + socket.isConnected());//向服务器发送数据OutputStream outputStream = socket.getOutputStream();outputStream.write(result.getBytes());//接收服务器文件InputStream inputStream = socket.getInputStream();String savePath = FILE_PATH + fileName;FileOutputStream fileOutputStream = new FileOutputStream(savePath, false);byte[] buffer = new byte[1024];int size = -1;Log.e("ThreadTAG", "run: -----" + size);while ((size = inputStream.read(buffer)) != -1) {fileOutputStream.write(buffer, 0, size);}fileOutputStream.close();inputStream.close();socket.close();File file = new File(savePath);MediaScannerConnection.scanFile(LoaddingActivity.this, new String[]{file.getAbsolutePath()}, null, null);//打开文件openFileIntent(savePath, fileName);} catch (IOException e) {e.printStackTrace();Log.e("ThreadTAG", "run: ---错误" + e);}public static File createSDDir(String dirName) throws IOException {File dir = new File(dirName);if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {System.out.println("createSDDir:" + dir.getAbsolutePath());System.out.println("createSDDir:" + dir.mkdir());}return dir;}