再與硬體的對接過程中,我們希望能夠通過IDEA來模擬一些與硬體通訊的二進位制資料,比如:
byte[] input = new byte[]{
// 型別編號
0x00,
// 中繼器編號
(byte) 0xff, (byte) 0xff,
// 監視器類別0
0x12,
// 監視器編號
(byte) 0xab, (byte) 0xff, (byte) 0xcb
};
IDEA自帶的的HTTP Request能夠快速的滿足我們各樣的資料請求,但在其官方文件中卻沒有傳送傳送二進位制資料流的直接示例。
若要傳送一些二進位制資料流,則可以按以下步驟操作:
建立二進位制文件
我們可以新建一個文件,名字及副檔名隨便起,比如我們將其命名為0x01.data
。該文件儲存的資訊則將是我們傳送http請求的二進位制資料流。
安裝外掛
若想使用0x01.data
檔案符合我們的測試要求,則需要一款二進位制的編輯器來編輯器。IDEA中友好的出現了BinEd外掛。
找到外掛管理,並在市場選項中以bined關鍵字進行搜尋後,安裝:
外掛安裝成功後,需要重新啟動IDEA。
編輯資料檔案
雙擊在前面我們建立的檔案0x01.data
,並任何選擇一種開啟方式,比如我們選擇將其做為文字開啟,然後在右側的檔案內容區域點選右鍵,並選擇最後一個選項 Open As Binary
:
此時就可以直接在這裡編輯二進位制檔案了。
建立請求
最後便可以使用HTTP Request來傳送以0x01.data
檔案為基礎的二進位制資料了。
我們在0x01.data
檔案的同級位置上新建一個Http Request,並加入以下程式碼:
POST http://localhost:8081/yourApi
Content-Type: application/octet-stream
< ./0x01.data
此時執行請請求,便可以成功地向後臺傳送二進位制資料流了。
其它
資料少的時候我們還可以手動敲一下,但如果資料量比較大,那麼我們肯定更期待使用一些JAVA的語法來構造(比如我們希望生成1M且有規則的二進位制資料流)。此時則需要一些程式碼來輔助了,示例程式碼如下:
package club.yunzhi.switchgear.httpRequest;
import club.yunzhi.switchgear.input.MonitorInput0x01Test;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class Monitor0x01 {
@Test
void saveToDisk() {
// 使用程式碼來構建測試的二進位制陣列
byte[] category = new byte[]{
(byte) 0x00,
(byte) 0x00, (byte) 0x01,
(byte) 0x01
};
byte[] bytes = ArrayUtils.addAll(category, MonitorInput0x01Test.input);
// 將二進位制寫入到0x01.data中
File outputFile = new File("./0x01.data");
try {
FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
fileOutputStream.write(bytes);
fileOutputStream.flush();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
程式碼執行完畢後,將生成的資料檔案複製到自己想要的位置即可。