Perbandingan jenis di Jawa
Sumber:
Theflashreads Dalam siaran ini, anda akan belajar tentang beberapa jenis pilihan perbandingan dalam Java. Cara yang paling biasa untuk menentukan sama ada objek tertentu ialah
contoh kelas, superclass atau antara muka tertentu adalah dengan menggunakan operator binari
instanceof . Ia termasuk semakan nol tersirat dan menjana ralat masa kompilasi jika jenis tidak terikat. Walau bagaimanapun, ia tidak membenarkan penggunaan primitif dan memerlukan jenis itu diketahui pada masa penyusunan.
Jika anda memerlukan semakan masa jalan dinamik
Dalam kes ini, gunakan kaedah
boolean isInstance(Object obj) yang setara dalam
Class . Ia juga termasuk semakan nol, tetapi membenarkan primitif:
a instanceof B
null instanceof B
a.getClass().isInstance(b);
Class<T> type = b.getClass();
type.isInstance(a);
int x = 4;
Integer.class.isInstance(x);
Menyemak keserasian dua jenis
Jika anda perlu menyemak perhubungan subjenis, gunakan kaedah
boolean isAssignableFrom(Class<?> cls) dalam
Class . Ini akan membantu menangkap
NullPointerException .
Class<?> aClass = CharSequence.class;
Class<?> bClass = String.class;
bClass.isAssignableFrom(aClass());
CharSequence[].class.isAssignableFrom(String[].class);
Integer[].class.isAssignableFrom(String[].class);
Padanan Corak (Java 14)
if(a instanceof B b) {
b.toString();
}
Jenis khas
enum Color { WHITE, GRAY, BLACK }
Color.class.isEnum();
Color.WHITE instanceof Enum;
String[].class.isArray();
Class<?> componentType = obj.getComponentType();
int.class.isPrimitive();
Java.io - Operasi I/O di Jawa
Sumber:
Sederhana Kandungan artikel ini adalah mengenai operasi I/O di Java. Dalam pembangunan aplikasi Android dan Java, input/output (Java I/O) merupakan salah satu topik yang sering digunakan, tetapi atas sebab tertentu jarang disebut. Walau bagaimanapun, skop aplikasinya adalah luas: contohnya, kami melakukan operasi I/O apabila menukar imej bitmap kepada format JPEG atau semasa membaca/menulis fail biasa. Pakej Java java.io mempunyai semua kelas yang diperlukan untuk melaksanakan operasi I/O. Operasi ini dilakukan menggunakan benang. Seterusnya, benang membantu melaksanakan operasi baca atau tulis. Contohnya, menulis mesej ke fail.
Jenis-jenis aliran
Terdapat dua jenis benang dalam Java:
- Strim Byte (strim bait)
- Aliran Watak
Strim bait
Strim Byte digunakan untuk membaca dan menulis satu bait data. Ia termasuk kelas Java
InputStream dan
OutputStream .
InputStream membantu membaca data dan
OutputStream membantu menulis data ke sasaran (mungkin fail).
Aliran watak
Character Stream digunakan untuk membaca dan menulis satu aksara data. Ia termasuk kelas
Reader dan
Writer Java . Untuk memahami
Pembaca dan
Penulis , anda mesti memahami kelas terbitan seperti
InputStreamReader ,
FileReader ,
OutputStreamWriter ,
FileWriter dan lain-lain.
InputStream dan OutputStream
InputStream digunakan untuk membaca data daripada sumber (mungkin fail). Ia tidak berguna dengan sendirinya, tetapi ia mempunyai beberapa kelas terbitan seperti
FileInputStream ,
ByteArrayInputStream , dan
ObjectInputStream .
OutputStream digunakan untuk menulis data ke sasaran (mungkin fail). Kelas terbitannya ialah
FileOutputStream ,
ByteArrayOutputStream , dan
ObjectOutputStream .
class InputOutput {
data class Car(val name: String): java.io.Serializable
fun fileStream() {
val outputStream = FileOutputStream("kotlin.txt")
outputStream.write(1)
outputStream.write("hello".toByteArray())
val inputStream = FileInputStream("kotlin.txt")
println(inputStream.read())
val msg = String(inputStream.readBytes())
println(msg)
outputStream.close()
inputStream.close()
}
fun byteArrayStream() {
val outputStream = ByteArrayOutputStream()
outputStream.write(1)
outputStream.write("hello".toByteArray())
val readByteArray = outputStream.toByteArray()
val inputStream = ByteArrayInputStream(readByteArray)
println(inputStream.read())
val msg = String(inputStream.readBytes())
println(msg)
outputStream.close()
inputStream.close()
}
fun objectStream() {
val car = Car(name = "BMW")
val fileOutputStream = FileOutputStream("kotlin.txt")
val objOutputStream = ObjectOutputStream(fileOutputStream)
objOutputStream.writeObject(car)
val fileInputStream = FileInputStream("kotlin.txt")
val objInputStream = ObjectInputStream(fileInputStream)
val carObject = objInputStream.readObject() as Car
println(carObject.name)
fileOutputStream.close()
objOutputStream.close()
fileInputStream.close()
objInputStream.close()
}
fun bufferStream() {
val fileOutputStream = FileOutputStream("kotlin.txt")
val outputStream = BufferedOutputStream(fileOutputStream)
outputStream.write("hello".toByteArray())
outputStream.flush()
val fileInputStream = FileInputStream("kotlin.txt")
val inputStream = BufferedInputStream(fileInputStream)
val msg = String(inputStream.readBytes())
println(msg)
fileOutputStream.close()
fileInputStream.close()
}
}
Selain daripada aliran di atas, kami juga mempunyai
DataInputStream dan
DataOutputStream . Mereka melakukan kerja yang sama seperti benang lain. Perbezaannya ialah
DataInput /
OutputStream digunakan terutamanya untuk membaca/menulis jenis primitif, manakala
ObjectInput /
OutputStream digunakan terutamanya untuk objek dan sebagainya.
Pembaca dan Penulis
Dalam Java I/O, jika kita membaca/menulis data ke strim, kita mesti menukarnya kepada bait terlebih dahulu. Hanya selepas itu kita boleh membaca atau menulisnya ke strim.
InputStreamReader dan
OutputStreamWriter melakukan ini secara automatik.
class ReaderWriter {
fun readerWriter() {
val outputStream = FileOutputStream("kotlin.txt")
val writer = OutputStreamWriter(outputStream)
writer.write("Hello Kotlin")
writer.flush()
val inputStream = FileInputStream("kotlin.txt")
val reader = InputStreamReader(inputStream)
println(reader.readText())
}
}
Baca dan tulis selari
Kadangkala kita memerlukan sokongan multithreading dalam Strim. Ringkasnya, kami ingin membaca dan menulis ke strim daripada benang yang berasingan. Untuk ini kita perlu menggunakan
PipedInput /
OutputStream .
fun pipedStream() {
val inputStream = PipedInputStream()
val outputStream = PipedOutputStream()
inputStream.connect(outputStream)
val writeThread = object : Thread() {
override fun run() {
try {
for (i in 0..100) {
outputStream.write(i)
println("Write : $i")
sleep(100)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
val readThread = object : Thread() {
override fun run() {
try {
for (i in 0..100) {
println("Read : ${inputStream.read()}")
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
writeThread.start()
readThread.start()
}
GO TO FULL VERSION