Utilities.java 源代码
package com.unity3d.services.core.misc;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import com.inmobi.media.fd;
import com.unity3d.services.core.log.DeviceLog;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Iterator;
import org.json.JSONException;
import org.json.JSONObject;
public class Utilities {
public static String Sha256(String str) {
return Sha256(str.getBytes());
}
public static JSONObject mergeJsonObjects(JSONObject jSONObject, JSONObject jSONObject2) throws JSONException {
if (jSONObject == null) {
return jSONObject2;
}
if (jSONObject2 == null) {
return jSONObject;
}
JSONObject jSONObject3 = new JSONObject();
Iterator<String> keys = jSONObject2.keys();
while (keys.hasNext()) {
String next = keys.next();
jSONObject3.put(next, jSONObject2.get(next));
}
Iterator<String> keys2 = jSONObject.keys();
while (keys2.hasNext()) {
String next2 = keys2.next();
if (jSONObject3.has(next2) && (jSONObject3.get(next2) instanceof JSONObject) && (jSONObject.get(next2) instanceof JSONObject)) {
jSONObject3.put(next2, mergeJsonObjects(jSONObject.getJSONObject(next2), jSONObject3.getJSONObject(next2)));
} else {
jSONObject3.put(next2, jSONObject.get(next2));
}
}
return jSONObject3;
}
public static byte[] readFileBytes(File file) throws IOException {
Path path;
byte[] readAllBytes;
FileInputStream fileInputStream = null;
if (file == null || !file.exists()) {
return null;
}
if (Build.VERSION.SDK_INT >= 26) {
path = file.toPath();
readAllBytes = Files.readAllBytes(path);
return readAllBytes;
}
try {
FileInputStream fileInputStream2 = new FileInputStream(file);
try {
int length = (int) file.length();
byte[] bArr = new byte[length];
if (fileInputStream2.read(bArr) == length) {
fileInputStream2.close();
return bArr;
}
throw new IOException("Failed to read all bytes from input file path: " + file.getPath());
} catch (Throwable th) {
th = th;
fileInputStream = fileInputStream2;
if (fileInputStream != null) {
fileInputStream.close();
}
throw th;
}
} catch (Throwable th2) {
th = th2;
}
}
public static void runOnUiThread(Runnable runnable) {
runOnUiThread(runnable, 0L);
}
public static String toHexString(byte[] bArr) {
String str = "";
for (byte b6 : bArr) {
int i6 = b6 & fd.i.NETWORK_LOAD_LIMIT_DISABLED;
if (i6 <= 15) {
str = str + "0";
}
str = str + Integer.toHexString(i6);
}
return str;
}
public static boolean writeFile(File file, String str) {
FileOutputStream fileOutputStream;
boolean z6 = false;
if (file == null) {
return false;
}
FileOutputStream fileOutputStream2 = null;
try {
try {
fileOutputStream = new FileOutputStream(file);
} catch (Throwable th) {
th = th;
}
} catch (Exception e6) {
e = e6;
}
try {
fileOutputStream.write(str.getBytes());
fileOutputStream.flush();
try {
fileOutputStream.close();
} catch (Exception e7) {
DeviceLog.exception("Error closing FileOutputStream", e7);
}
z6 = true;
} catch (Exception e8) {
e = e8;
fileOutputStream2 = fileOutputStream;
DeviceLog.exception("Could not write file", e);
if (fileOutputStream2 != null) {
try {
fileOutputStream2.close();
} catch (Exception e9) {
DeviceLog.exception("Error closing FileOutputStream", e9);
}
}
if (z6) {
}
return z6;
} catch (Throwable th2) {
th = th2;
fileOutputStream2 = fileOutputStream;
if (fileOutputStream2 != null) {
try {
fileOutputStream2.close();
} catch (Exception e10) {
DeviceLog.exception("Error closing FileOutputStream", e10);
}
}
throw th;
}
if (z6) {
DeviceLog.debug("Wrote file: " + file.getAbsolutePath());
}
return z6;
}
public static String Sha256(byte[] bArr) {
if (bArr == null) {
return null;
}
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(bArr, 0, bArr.length);
return toHexString(messageDigest.digest());
} catch (NoSuchAlgorithmException e6) {
DeviceLog.exception("SHA-256 algorithm not found", e6);
return null;
}
}
public static void runOnUiThread(Runnable runnable, long j6) {
Handler handler = new Handler(Looper.getMainLooper());
if (j6 > 0) {
handler.postDelayed(runnable, j6);
} else {
handler.post(runnable);
}
}
public static String Sha256(InputStream inputStream) throws IOException {
if (inputStream == null) {
return null;
}
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
byte[] bArr = new byte[4096];
while (true) {
int read = inputStream.read(bArr);
if (read != -1) {
messageDigest.update(bArr, 0, read);
} else {
return toHexString(messageDigest.digest());
}
}
} catch (NoSuchAlgorithmException e6) {
DeviceLog.exception("SHA-256 algorithm not found", e6);
return null;
}
}
}