คลาส JsonFactory เป็น thread-safe และรับผิดชอบสร้าง instances ของ writer และ reader รายการ settings ที่สามารถ เปิด/ปิด (turn on/off) อยู่ใน enumeration JsonFactory.Feature ซึ่งมี static method values() คืนค่า enum constants
Syntax
public static enum JsonFactory.Feature extends Enum<JsonFactory.Feature>
ตัวอย่างการใช้งาน
import com.fasterxml.jackson.core.JsonFactory;
public class JsonFactorySettingsTest {
public static void main(String[] args) {
JsonFactory jsonFactory = new JsonFactory();
for (JsonFactory.Feature feature : JsonFactory.Feature.values()) {
boolean result = jsonFactory.isEnabled(feature);
System.out.println(feature.name() + ":" + result);
}
}
}
ผลลัพธ์ (Output) - Default Settings
INTERN_FIELD_NAMES:true
CANONICALIZE_FIELD_NAMES:true
FAIL_ON_SYMBOL_HASH_OVERFLOW:true
USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING:true
คำอธิบาย Features
| Feature | Default | คำอธิบาย |
|---|---|---|
| INTERN_FIELD_NAMES | true | ใช้ string interning สำหรับ field names ลด memory usage |
| CANONICALIZE_FIELD_NAMES | true | canonicalize field names (เก็บเพียงหนึ่ง instance ต่อ unique name) |
| FAIL_ON_SYMBOL_HASH_OVERFLOW | true | โยน error ถ้า symbol table hash overflow (ป้องกัน DoS) |
| USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING | true | ใช้ thread-local buffer recycling เพื่อ performance |
การเปลี่ยนแปลง Settings
JsonFactory factory = new JsonFactory()
.disable(JsonFactory.Feature.INTERN_FIELD_NAMES)
.disable(JsonFactory.Feature.CANONICALIZE_FIELD_NAMES)
.enable(JsonFactory.Feature.USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING);
ความสัมพันธ์กับ JsonParser/JsonGenerator
- JsonFactory เป็น factory สร้าง JsonParser และ JsonGenerator
- Settings ของ Factory จะสืบทอดไปยัง Parser/Generator ที่สร้างจากมัน
- Parser/Generator มี features ของตัวเองเพิ่มเติม (JsonParser.Feature, JsonGenerator.Feature)
สรุป
JsonFactory.Feature ให้การควบคุม low-level settings ของ JSON processing factory ทั้ง symbol table management, memory optimization, และ thread safety เป็น settings ระดับ infrastructure ที่ส่งผลต่อ performance และ behavior ทั้ง parser และ generator