今天真的很幹,剛回到家,發現前幾個月重新發布的APP又被腰斬了。
2018年11月9日 星期五
2018年11月8日 星期四
【Java】FileStream 底層資料
| test.java |
| File file1=new File("C:\\Users\\517106\\Desktop\\testFile\\test.tst"); FileOutputStream fos=new FileOutputStream(file1); fos.write(0x41); fos.write(0x42); fos.write(0x43); fos.write(0x44); |
fos.write(int);
使用Notepad++開啟
使用HxD開啟
參考資料
2018年11月7日 星期三
2018年10月30日 星期二
【Linux】建立軟連結
| $ls / -la |
| drwxr-xr-x 23 root root 4096 六 10 22:45 . drwxr-xr-x 23 root root 4096 六 10 22:45 .. drwxr-xr-x 2 root root 4096 九 8 22:21 bin drwxr-xr-x 3 root root 2560 一 1 1970 boot drwxr-xr-x 16 root root 3580 十 30 21:34 dev drwxr-xr-x 131 root root 12288 十 30 23:30 etc drwxr-xr-x 5 root root 4096 十 30 23:23 home drwxr-xr-x 17 root root 4096 七 1 17:43 lib drwx------ 2 root root 16384 三 14 2018 lost+found drwxrwxrwx 5 root root 4096 九 20 00:00 media drwxr-xr-x 2 root root 4096 三 14 2018 mnt drwxr-xr-x 16 pi pi 4096 六 10 23:02 mystic drwxr-xr-x 9 root root 4096 九 4 00:29 opt dr-xr-xr-x 172 root root 0 一 1 1970 proc drwx------ 14 root root 4096 十 30 22:45 root drwxr-xr-x 33 root root 1100 十 30 23:00 run drwxr-xr-x 2 root root 12288 九 8 22:21 sbin drwxr-xr-x 3 root root 4096 四 25 2018 srv drwxr-xr-x 3 ftp-admin ftp 4096 十 30 21:35 storage dr-xr-xr-x 12 root root 0 十 30 21:25 sys drwxrwxrwt 14 root root 4096 十 30 23:45 tmp drwxr-xr-x 11 root root 4096 三 14 2018 usr drwxr-xr-x 12 root root 4096 四 25 2018 var |
| $ln -s /storage storage |
| $ls ~ -la |
| lrwxrwxrwx 1 pi pi 8 十 30 23:49 storage -> /storage |
2018年10月25日 星期四
【DOS】如何得知BAT檔目錄位置當以系統管理員開啟時
這幾天再嘗試寫DOS的批次檔,因為要將此目錄的檔案移至Program File,
需要以系統管理員開啟,結果不管呼叫的是%CD%還是pwd,都顯示目前位置在C:\Windows\system32,這樣要copy檔案時還要回來找原本目錄的位置。
| test.bat |
| pwd echo %CD% pause |
| 以一般使用者開啟 |
| C:\Users\vincent\Desktop>pwd C:\Users\vincent\Desktop C:\Users\vincent\Desktop>echo C:\Users\vincent\Desktop C:\Users\vincent\Desktop C:\Users\vincent\Desktop>pause 請按任意鍵繼續 . . . |
| 以系統管理員開啟 |
| C:\Windows\system32>pwd C:\Windows\system32 C:\Windows\system32>echo C:\Windows\system32 C:\Windows\system32 C:\Windows\system32>pause 請按任意鍵繼續 . . . |
解決
| test2.bat |
| SET LOCAL_PATH="%~dp0" echo %LOCAL_PATH% |
| 以一般使用者開啟 |
| C:\Users\vincent\Desktop>SET LOCAL_PATH="C:\Users\vincent\Desktop\" C:\Users\vincent\Desktop>echo "C:\Users\vincent\Desktop\" "C:\Users\vincent\Desktop\" C:\Users\vincent\Desktop>pause 請按任意鍵繼續 . . . |
| 以系統管理員開啟 |
| C:\Windows\system32>SET LOCAL_PATH="C:\Users\vincent\Desktop\" C:\Windows\system32>echo "C:\Users\vincent\Desktop\" "C:\Users\vincent\Desktop\" C:\Windows\system32>pause 請按任意鍵繼續 . . . |
參考資料
2018年10月20日 星期六
【Android】Android Studio拋錯llvm-rs-cc is missing
Android Studio拋錯
| java.lang.IllegalStateException: llvm-rs-cc is missing |
| Caused by: java.lang.IllegalStateException: llvm-rs-cc is missing at com.android.builder.core.AndroidBuilder.compileAllRenderscriptFiles(AndroidBuilder.java:1194) at com.android.build.gradle.tasks.RenderscriptCompile.taskAction(RenderscriptCompile.java:206) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:788) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:755) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:124) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:113) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:95) ... 108 more |
解決
- 刪除SDK目錄下的build-tools
- 開啟SDK Manager,重新下載Android SDK build-tools
參考
2018年10月14日 星期日
【Java】使用Cipher實現字串加密/解密
| 程式碼:CipherAdaptor.java |
| import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.Provider; import java.util.Base64; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.CipherSpi; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class CipherAdaptor{ private Base64.Decoder decoder=Base64.getDecoder(); private Base64.Encoder encoder=Base64.getEncoder(); private final SecretKey secretKey; private final String algorithm,charset; private Cipher cipher; CipherAdaptor(String algorithm,SecretKey secretKey,String charset) throws NoSuchPaddingException, NoSuchAlgorithmException { encoder=encoder.withoutPadding();//設定Base64的解碼規則:編碼器省略末段的'='字符(如果有的話)。 this.secretKey=secretKey; this.algorithm=algorithm; this.charset=charset; cipher=Cipher.getInstance(algorithm);//定義Cipher所使用的演算法 } /* * 明文:訊息 * 密文:明文經過加密所產生的信息被稱為密文 * */ String encrypt(String str) throws Exception { // 將明文轉換成位元組陣列 byte[] executed=encrypt(str.getBytes(charset)); // 將已加密的位元組陣列使用Base64表示,因為輸出的位元組值不一定在字碼表內, // Base64可以將原始資料轉換為字串,提供後續使用的方便性。 return encoder.encodeToString(executed); } byte[] encrypt(byte[] raw) throws Exception { // 將位元組陣列編碼成Base64格式 return execute(raw,Cipher.ENCRYPT_MODE,secretKey); } String decrypt(String str) throws Exception { // 將密文解碼成位元組陣列 byte[] CryptedBytes=decoder.decode(str); return new String(decrypt(CryptedBytes),charset); } byte[] decrypt(byte[] raw) throws Exception { // 將已加密的位元組解密成位元組 return execute(raw,Cipher.DECRYPT_MODE,secretKey); } String getAlgorithm(){ return cipher.getAlgorithm(); } private byte[] execute(byte[] raw,int mode,SecretKey secretKey) throws InvalidKeyException, BadPaddingException, IllegalBlockSizeException{ cipher.init(mode,secretKey);//初始化Cipher return cipher.doFinal(raw);//加密(Cipher.ENCRYPT_MODE)/解密(DECRYPT_MODE) } static SecretKey Str2Key(String str,String algorithm) throws UnsupportedEncodingException { // 將字串轉換成位元組陣列 byte[] byte_key=str.getBytes("UTF-8"); // 將位元組轉成SecretKey return new SecretKeySpec(byte_key,0,byte_key.length,algorithm); } |
訂閱:
文章 (Atom)